Ich vermute, dass Sie eine Versionskonflikt zwischen den Java JNI-Bindungen und Ihre Version von opencv haben.
Das undefinierte Symbol: _ZN2cv6String8allocateEm entsteht, weil Ihr libJavaFileName.so einen Verweis auf dieses Symbol enthält, aber der Linker keine Objektdatei finden kann, die es definiert.
können Sie das Programm C++ filt verwenden Sie das Symbol in einen lesbaren Namen unmangle:
> c++filt -n _ZN2cv6String8allocateEm
cv::String::allocate(unsigned long)
Wenn Sie in der Quelle opencv sehen 3.1 Sie sehen, dass diese Funktion in der Tat existiert (sein in stl.cpp im Kernmodul).
Das Symbol ist nicht in den Bibliotheken für opencv auf meinem Computer (Version 2.4.8) definiert, aber es ist in libopencv_core.so definiert, wenn ich Version 3.1 von der Quelle erstelle.
Daher vermute ich, es ist wahrscheinlich der Fall, dass Sie eine neuere Version von opencv installieren müssen.
Es lohnt sich auch zu überprüfen, dass es tatsächlich die Version der freigegebenen Bibliothek lädt, die Sie denken, dass es ist. Wenn Sie das tun:
strace -o log.txt java rest_of_your_command_line
Dann können Sie durch log.txt schauen, um zu sehen, welche gemeinsam genutzten Bibliotheken geöffnet werden. Versuchen Sie, diese Datei für opencv zu überschreiben, um zu sehen, ob die richtige Version geladen wird.
Vielen Dank für Ihre Antwort, aber ich habe opencv 3.1, die neueste Version. – user5388874
OK. Ich frage mich, ob Sie zwei Versionen installiert haben und nicht die neue finden? Ich habe oben einen Hinweis hinzugefügt, um zu überprüfen, welche Shared Library geladen wird –