2014-09-08 2 views
0

this example. 이후 Java에서 Opencv 용 FaceRecognition 래퍼를 추가하려고 시도했기 때문에 우분투에서이 작업을 수행하려고 했으므로 몇 가지 문제가 있었지만 .so 파일을 만들 수있었습니다. 결국.자바에서 열린 Cv 얼굴 인식 : 심볼 검색 오류

/usr/lib/jvm/java-7-openjdk-amd64/bin/java: symbol lookup error: /home/vlad/workspace/HelloJNI/jni/libRecognizer.so: undefined symbol: _ZN2cv24createLBPHFaceRecognizerEiiiid 

내 메이크 파일은 다음과 같습니다 : 나는 "LDD"와 "libopencv_java249.so"을 시도

# Define a variable for classpath 
CLASS_PATH = ../bin 

# Define a virtual path for .class in the bin directory 
vpath %.class $(CLASS_PATH) 

all : libRecognizer.so 

# [email protected] matches the target, $< matches the first dependancy 
libRecognizer.so : facerec.cpp 
    g++ -fPIC -o [email protected] -shared -Wl,-rpath, -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" $< 
    #cc -fPIC -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" -Wl, -shared -o [email protected] 

# [email protected] matches the target, $< matches the first dependancy 
#HelloJNI.o : HelloJNI.c HelloJNI.h 
# gcc -m64 -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" -c $< -o [email protected] 

# $* matches the target filename without the extension 
LBPHFaceRecognizer.h : LBPHFaceRecognizer.class 
    javah -classpath $(CLASS_PATH):../jni/opencv-249.jar $* 

clean : 
    rm LBPHFaceRecognizer.h LBPHFaceRecognizer.o libRecognizer.so 

가 보인다 내가 오류를 얻을 수 있기 때문에

그럼에도 불구하고 나는 그것을 사용할 수 없습니다 가 :

[email protected]:~/workspace/HelloJNI/jni$ ldd libRecognizer.so 
    linux-vdso.so.1 => (0x00007fff969fe000) 
    /home/vlad/workspace/HelloJNI/jni/libopencv_java249.so (0x00007fb24797a000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb247658000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb247441000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb24723d000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb24701f000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb246e16000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb246b10000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb24674a000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fb248ed1000) 
그래서 정말 다음에 시도 해야할지 모르겠어

...

업데이트 : 터미널에서이 같은 일을 결국

:

g++ -L/usr/lib/jni -fPIC -o libRecognizer.so -shared -Wl,-rpath, -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" facerec.cpp -lopencv_java249 

그래서에 내가 추가했다 /usr/lib/jni/libopencv_java249.so -L/USR/I 터미널에서이 같은 일을 결국-lopencv_java249

+0

메소드가 Java 랩퍼로 전혀 내보내지지 않았습니다 (알려진 문제점). 당신은 그것에 대한 jni 코드를 추가해야하고 또 다른 래퍼 클래스는 – berak

+0

입니다. 사용하기 쉬운 래퍼는 [JavaCPP 프리셋] (https://github.com/bytedeco/javacpp-presets/)으로 미리 빌드되어 제공됩니다 : http : //bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_contrib.FaceRecognizer.html –

+0

^^^ 예, javacv가 아니라 opencv의 자체 래퍼입니다. – berak

답변

0

JNI/lib 디렉토리 :

g++ -L/usr/lib/jni -fPIC -o libRecognizer.so -shared -Wl,-rpath, -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" facerec.cpp -lopencv_java249 
+0

왜 '해결'이라고 표시되어 있습니까? 문제가 남아 있습니다. – berak

+0

-L/usr/lib/jni 및 -lopencv_java249를 추가 한 후에 더 이상 심볼 검색 오류가 없었습니다. 문제가 내 .so를 libopencv_java249.so에 연결하지 않았던 것 같습니다. – colegu