2010-08-19 6 views
2

Je construis un module Python Boost (fichier de bibliothèque .donc partagée) qui dépend d'une autre bibliothèque externe (STXXL)Lier une bibliothèque statique en Python Boost (bibliothèque partagée) - Erreur d'importation

Alors que je peux construire et l'importation l'exemple des modules Boost Python, je rencontre des problèmes lorsque STXXL est jeté dans le mix. Plus précisément lors de l'exécution import fast_parts en python

Je reçois ImportError: ./fast_parts.so: undefined symbol: _ZN5stxxl10ran32StateE

Cela me dit que la bibliothèque STXXL n'est pas liée, mais je ne sais pas comment cela pourrait être comme je suis contre et liez l'éditeur de liens ISN ne me donne aucune erreur. Il convient de noter que je peux construire et exécuter avec succès des programmes autonomes en utilisant STXXL et, autant que je sache, les bibliothèques sont stockées dans une archive .a dans le répertoire lib illustré ci-dessous. Je réduit mon Makefile jusqu'à une seule commande comme suit:

g++ -I/home/zenna/Downloads/stxxl-1.3.0/include -include stxxl/bits/defines.h -I/home/zenna/local/include -I/usr/include/python2.6 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -O3 -Wall -g -DFOO=BAR -pthread -L/home/zenna/Downloads/stxxl-1.3.0/lib/ -lstxxl -L/home/zenna/local/lib/ -lboost_python -lpython2.6 -fPIC -shared -o fast_parts.so partition.cpp

Un conseil?

Répondre

0

Je suppose Linux, s'il vous plaît commenter si c'est incorrect. Que ressemble la sortie ldd pour libfast_parts.so? Est-ce que cela indique libstxxl.so est introuvable?

Vous devrez peut-être ajouter /home/zenna/Downloads/stxxl-1.3.0/lib/ dans votre LD_LIBRARY_PATH ou le rpath pour libfast_parts.so.

-Wl,-rpath,/home/zenna/Downloads/stxxl-1.3.0/lib -L/home/zenna/Downloads/stxxl-1.3.0/lib -lstxxl 
+0

Ainsi fast_parts.so est le module de sortie final. le ldd pour cela ne nécessite pas libstxxl.so car libstxxl n'existe pas, le seul fichier qui existe est stxxl.a qui est une archive de fichiers de bibliothèque statiques .o. Il semble que le symbole manquant en question _ZN5stxxl10ran32StateE soit contenu avec un fichier rand.libstxxl.o contenu dans l'archive (trouvé à l'aide de l'outil nm), mais quand cela n'apparaît pas quand je lance nm sur l'archive elle-même. Je ne sais pas si cela est pertinent – zenna

+0

En fait, ce n'est pas vrai nm sur fast_parts a montré fast_part.so:0001eec0 t _GLOBAL__I__ZN5stxxl10ran32StateE – zenna

+0

quelque chose semble étrange au sujet de votre lien de lien, vous pouvez jouer avec l'ordre de '-lstxxl 'et quels que soient les fichiers objets dont les symboles sont définis. –

Questions connexes