Python ImportError - symbole non défini - pour le module C ++ personnalisé

J'ai développé un module Python en C++ à l'aide d'OpenCV 2.3 dans 2.4.2, sur Ubuntu 11.04. OpenCV a été construit à partir de la source. Je ne suis pas en utilisant la version d'OpenCV depuis les dépôts Ubuntu.

Mon module Python compile sans problèmes et est chargé en Python correctement. Cependant, quand je compile ce module sur Ubuntu 11.10 ou 12.04, j'ai un ImportError avec le message "undefined symbol" lorsque vous essayez de charger en Python.

C'est de cette façon que je compile le module:

g++ -fPIC -shared `pkg-config --cflags --libs python` `pkg-config --cflags --libs opencv` -I/usr/local/include/opencv2/legacy -o mymodule.so mymodule.cpp

C'est la sortie de "pkg-config --cflags --libs opencv"

-I/usr/local/include/opencv -I/usr/local/include  /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

L'erreur que j'obtiens est:

ImportError: /path/to/service/mymodule.so: undefined symbol: _ZN5CvSVMD1Ev

Ma compréhension est que "undefined symbol" signifie généralement que le symbole ne peut pas être trouvée dans l'une des librairies. Mais je sais que ce symbole est là, dans libopencv_ml.donc, parce que quand je lance ceci:

$ nm -g  /usr/local/lib/libopencv_ml.so | grep _ZN5CvSVMD1Ev

J'obtiens:

000000000002fd40 T _ZN5CvSVMD1Ev

/usr/local/lib semble être dans l'éditeur de liens dynamique du cache.

$ cat /etc/ld.so.conf.d/libc.conf 
# libc default configuration
/usr/local/lib

Et le fichier est présent dans le cache.

$ ldconfig -p | grep opencv | grep ml
        libopencv_ml.so.2.4 (libc6,x86-64) => /usr/local/lib/libopencv_ml.so.2.4
        libopencv_ml.so (libc6,x86-64) => /usr/local/lib/libopencv_ml.so

Alors pouvez-vous me donner aucune idée de ce que je fais de mal? A quelque chose a changé entre Ubuntu 11.04 et 11.10, dans la manière dont les bibliothèques partagées sont chargés lors de l'exécution de Python? Ou est-ce un problème avec OpenCV?

source d'informationauteur Rajesh J Advani | 2012-07-25