2012-04-20 3 views
0

안녕하세요. 네이티브 프로그램을 호출해야하는 자바 프로그램이 있습니다.이 원시 프로그램은 두 가지 파일로 제공됩니다. 그래서 내 Java 프로그램을 위해이 원시 프로그램 API를 사용하기 위해 파일을 만듭니다. 내 두 개의 파일을 하나의 파일로 만든 다음 내 Java 프로그램을 실행하여 파일을 병합하려고했습니다. 그러나, 그것은 이런 식으로 실패한 것 같습니다. 더 구체적으로 말하자면, 여기에 제 예제가 있습니다.복수 공유 라이브러리 구축

나는 네이티브 코드를 호출해야하는 자바 프로그램 A를 가지고있다. 따라서 일부 원시 코드를 작성하여 공유 라이브러리 (C.so라고 함)로 작성했습니다.

필자가 작성한 원시 코드는 다른 파일에있는 다른 코드를 사용해야합니다. (A.so, B.so)

따라서 Java 프로그램을 작동시키기 위해 A.so와 B.so 파일을 컴파일하는 방법에 대한 아이디어가 있습니까?

답변

0

나는 다음과 같은 있으리라 믿고있어 :

  • 당신이 c.so을 연결

    , 당신은 a.so 목록 및 명령 행에 b.so된다.
  • c.so에서 ldd를 실행하면 a.so와 b.so가 표시됩니다.
  • 실행할 때 -Djava.library.path를 세 가지 모두 포함하는 디렉토리를 포함하도록 설정합니다.
  • 실행할 때 LD_LIBRARY_PATH를 3 개를 모두 포함하는 디렉토리를 포함하도록 설정하지 마십시오.

LD_LIBRARY_PATH 환경 변수가 라이브러리가있는 디렉토리를 포함하도록 설정하면 원하는 결과를 얻을 수 있습니다.

더 설명하고, 대안의 경우, https://github.com/bimargulies/jni-origin-testbed를 참조하십시오.

+0

예, 빙은 a.so 및 b.so 저를주고 내가 3 라이브러리를 포함하도록 LD_LIBRARY_PATH를 설정했다. 나는 아직도 전화의 – user1197891

+0

당신의 다음 포트가 LD_DEBUG 환경 변수 이유 ... 나는 그것을 알아낼 수 UnsatisfiedLinkError를 얻을. – bmargulies

+0

질문을 편집하여 예외 오류 메시지의 전체 내용을 포함하십시오. LD_LIBRARY_PATH를 개별 파일 경로명이 아닌 파일이 들어있는 * 디렉토리 *로 설정 했습니까? – bmargulies