2010-12-01 3 views
1

J'essaie donc de lier statiquement Xerces 3.0.0 sous linux.xerces 3.0.0 lié statiquement ne fonctionne pas pendant que la dynamique fonctionne sous Linux

Je l'ai déjà fait avec un lien dynamique et cela fonctionne, mais pour éviter la dépendance je veux le faire de façon statique.

j'ai changé tous les fichiers make pour le faire de manière appropriée

-Wl,-Bstatic ... -lxerces-c -Wl,-Bdynamic ...

Mais je reçois des erreurs suivantes:

undefined reference to '__ctype_b' 
    undefined reference to '__ctype_tolower' 
    undefined reference to '__ctype_toupper' 

Je fixe ceux avec la méthode de la force brute trouvé here

Mais il y avait un autre type d'erreur liée à xerces.

Xerces/3.0.0/lib/libxerces-c.a(PosixMutexMgr.o): 
In function `xercesc_3_0::PosixMutexMgr::create(xercesc_3_0::MemoryManager*)': 

PosixMutexMgr.cpp:(.text+0x84): undefined reference to `pthread_mutexattr_init' 
PosixMutexMgr.cpp:(.text+0x95): undefined reference to `pthread_mutexattr_settype' 
PosixMutexMgr.cpp:(.text+0xad): undefined reference to `pthread_mutexattr_destroy' 
PosixMutexMgr.cpp:(.text+0xd0): undefined reference to `pthread_mutexattr_destroy' 

Il semble que son pthread manque donc j'ai essayé d'ajouter, mais cela ne résout pas le problème ... Ces erreurs proviennent de Xerces ... et la version dynamique fonctionne très bien statique échoue.

Des idées ???

Merci

Répondre

1

La version dynamique des xerces aura des dépendances sur libpthread qui garantissent que le chargeur récupérera la bibliothèque correcte. La spécification de libphtread sur votre ligne de commande de l'éditeur de liens doit corriger ces éléments externes non résolus, avez-vous (a) placé au bon endroit sur la ligne de commande car la commande est importante et (b) avez-vous essayé les versions statique et dynamique de libpthread?

+0

Eh bien, j'ai ajouté -lpthread après -Wl, -Bstatic. – grobartn

+0

Je n'ai pas essayé la version dynamique de pthread lib. Mais je vais essayer aussi – grobartn

+0

Avez-vous ajouté -lpthread avant ou après -lxerces-c? IIRC il doit aller * après *, si vous le mettez avant alors l'ordre est faux et vous aurez toujours les symboles non résolus. –

0

L'ordre des questions de lib liées à l'éditeur de liens, essayez de modifier l'ordre pour pthread lib.

Questions connexes