繁体   English   中英

在Java中打开Cv人脸识别:符号查找错误

[英]Open Cv Face Recognition in java : symbol lookup error

此示例之后,我尝试在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

我试过“ ldd”和“ libopencv_java249.so”似乎在那里:

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

我最终在终端中做了这样的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM