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
메소드가 Java 랩퍼로 전혀 내보내지지 않았습니다 (알려진 문제점). 당신은 그것에 대한 jni 코드를 추가해야하고 또 다른 래퍼 클래스는 – berak
입니다. 사용하기 쉬운 래퍼는 [JavaCPP 프리셋] (https://github.com/bytedeco/javacpp-presets/)으로 미리 빌드되어 제공됩니다 : http : //bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_contrib.FaceRecognizer.html –
^^^ 예, javacv가 아니라 opencv의 자체 래퍼입니다. – berak