2009-12-12 2 views
0

J'essaie de lier quelque chose que j'ai écrit à une bibliothèque partagée existante. Je gcc 3.2.3 sur RedHat 3. Quand j'arrive à la phase de lien je reçois une erreur qui dit:espace de noms std vs. _STL problèmes de lien d'espace de noms

object_files_linux/hvm_example.o (.text + 0x233): ~/hvm_example.cpp: 254: Non défini référence à `Xoc :: hvmapi :: id (std :: basic_string, std :: allocateur> const &) »

J'ai exécuter la commande nm sur le fichier objet et il montre cela pour la fonction en question:

U xoc :: :: hvmapi id (std :: basic_string, std :: allocateur> const &)

I exécuter nm sur le sha bibliothèque rouge et cela pour montrer la fonction en question:

T Xoc :: hvmapi :: id (STL :: __ basic_string, _STL :: allocateur> const &)

Ma question est: Est-ce que la liaison parce que ma fonction utilise l'espace de noms std et la bibliothèque partagée utilise l'espace de noms _STL?

Existe-t-il une solution?

Je n'ai pas accès à la source du code source de la bibliothèque partagée, mais j'ai des fichiers d'en-tête qui utilisent l'espace de noms std pour les paramètres.

Merci, Mike

Répondre

0

La bibliothèque partagée que vous utilisez a probablement été construit avec STLport. Lisez la documentation pour cette bibliothèque partagée - il doit clairement indiquer que vous devez compiler votre code avec STLport ainsi que la version spécifique de STLport que vous devriez utiliser.

Notez que les différentes versions de g++ ne sont pas compatibles avec la liaison, en particulier autour des versions 3.2.x, 3.3.x et 3.4.x. Vous devez compiler avec la même version de g++ que celle qui a été utilisée pour créer votre bibliothèque partagée tierce.