Ouvrir la reconnaissance faciale Cv en java: erreur de recherche de symbole


J'ai essayé d'ajouter le wrapper FaceRecognition pour Opencv en java après cet exemple. J'ai eu quelques problèmes puisque j'essaie de le faire sur Ubuntu, mais j'ai pu créer le fichier .so à la fin.

Je ne peux toujours pas l'utiliser car j'obtiens l'erreur:

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

Mon makefile ressemble à ceci:

# 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

J'ai essayé "ldd" et "libopencv_java249.so" semble être là:

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)

Donc je ne sais vraiment pas quoi essayer ensuite...

MISE À JOUR:

J'ai fini faire quelque chose comme ça dans le terminal:

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

Donc, pour /usr/lib/jni/libopencv_java249.j'ai donc dû ajouter -L/usr/lib/jni et -lopencv_java249

Author: Community, 2014-09-09

1 answers

J'ai fini par faire quelque chose comme ça dans le terminal:

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
Author: colegu, 2014-09-11 21:16:02