내 문제로 누군가 도와 줄 수 있기를 바랍니다. 나는 원래 Windows 용으로 만들어진 JNI 용 C 래퍼를 리눅스에서 컴파일하고있다. (나는 이미 [여기] [1]에서 풀린 질문을 가지고있다.) 내 현재 문제는 다음과 같습니다.JNI 용 C 래퍼를 연결 한 후 java.lang.UnsatisfiedLinkError
코드는 기본적으로 aaa.c, aaa.h, bbb.c으로 구성되어 있으며, 지금, 나는 코드 :: 블록에서 프로젝트를 생성
aaa.h is the header generated by "javah" tool.
aaa.c is the implementation of aaa.h bbb.h and bbb.c have some
functions called by aaa.c, one of them is:
int jstring2char(JNIEnv*, jstring, char**);
bbb.h.
gcc -Wall -g -D_GNU_SOURCE -DUNIX -I../somepath/Inc -I/usr/local/jdk1.7.0_40/include/linux -I/usr/local/jdk1.7.0_40/include -c /somepath/Scr/aaa.c -o obj/Debug/aaa.o
gcc -Wall -g -D_GNU_SOURCE -DUNIX -I../somepath/Inc -I/usr/local/jdk1.7.0_40/include/linux -I/usr/local/jdk1.7.0_40/include -c /somepath/Scr/bbb.c -o obj/Debug/bbb.o
g++ -shared obj/Debug/aaa.o obj/Debug/bbb.o -o bin/Debug/libWrapper.so
과정은 0 오류, 0 경고 완료 : 프로젝트를 빌드 할 때이 실행 된 명령입니다. 이제
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/somepath
내가 생성 된 라이브러리를
System.loadLibrary("libWrapper.so");
오류로드하려고 :
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libWrapper.so in java.library.path
를 생성
는 그럼 난/옵션/somepath는가에있는 라이브러리를 설치 .
[email protected]:/opt/somepath# ldd libWrapper.so
linux-gate.so.1 => (0x00110000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00161000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00111000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00662000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00bae000)
/lib/ld-linux.so.2 (0x00915000)
그래서 내 첫 번째 문제는 "리눅스 gate.so.1는"문제를 일으키는 것입니다 만약 내가 모르겠입니다 : 나의 첫번째 추측이 일부 unsatisfaied 의존성이 내가 LDD RN 것입니다.
Native.loadLibrary("libWrapper.so", SClass.class);
효과, 난 다른 메시지에서 가지고 :
반면에 , 나는 더 구체적인 오류 메시지가 발생했을 경우 바로 확인하려면 JNA API와 라이브러리를로드하여 테스트Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libWrapper.so': libWrapper.so: undefined symbol: jstring2char
jstring2char은 bbb.h에서 선언 된 함수로 aaa.c에 의해 호출되는 bbb.c에서 구현됩니다. 이제는 aaa.c가 bbb.c 함수를 해결하지 못하는 것 같습니다. 두 함수 모두 빌드시에 링크되었지만.
지금 내 질문은 UnsatisfiedLinkError, linux-gate.so.1 또는 jstring2char? 함수의 원인 일 수 있습니다. 커뮤니티가 나에게 줄 수있는 힌트는 무엇입니까?
대단히 감사합니다. [1] : (예를 들어, 그것은 Windows에서 Wrapper.dll
을거야)
System.loadLibrary("Wrapper");
파일 이름이 자동으로 계산되는 시스템에 따라 :
실제 네이티브 함수 (Java 및 헤더)는 무엇입니까? –