我尝试在this example.之后在java中为Opencv添加FaceRecognition包装器我遇到了一些问题,因为我试图在Ubuntu上执行此操作,但我最终能够创建.so文件。
我收到错误后仍然无法使用它:
/usr/lib/jvm/java-7-openjdk-amd64/bin/java: symbol lookup error: /home/vlad/workspace/HelloJNI/jni/libRecognizer.so: undefined symbol: _ZN2cv24createLBPHFaceRecognizerEiiiid
我的makefile如下所示:
# 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
# $@ matches the target, $< matches the first dependancy
libRecognizer.so : facerec.cpp
g++ -fPIC -o $@ -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 $@
# $@ 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 $@
# $* 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
我试过&#34; ldd&#34;和&#34; libopencv_java249.so&#34;好像在那里:
vlad@woow-1022:~/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 / lib / jni 和 -lopencv_java249
答案 0 :(得分:0)
我最终在终端上做了类似的事情:
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