2009-03-06 6 views
1

Je comprends que la bibliothèque statique boost regex est créée avec l'utilitaire ar en archivant les fichiers objets individuels.Erreur avec deux manières de lier boost regex

J'ai lié la bibliothèque regex boost en utilisant l'option -l dans gcc. Cela a très bien fonctionné.

g++ *.o libboost_regex-gcc-1_37.a -o sairay.out 

Je compilé individuellement les fichiers source regex boost, puis a essayé de lier les fichiers objet de mon application et les fichiers objet de regex boost en un seul exécutable. Mais maintenant je reçois des erreurs.

g++ *.o -o sairay.out 
    Undefined      first referenced 
    symbol        in file 
    main        /opt/csw/gcc3/lib/gcc/sparc-sun-solaris2.8/3.4.5/crt1.o 

Je voudrais savoir quelle est la différence entre les liens de la bibliothèque statique et reliant les objets individuels des fichiers de bibliothèque statique avec le applicatiion?

+0

je suis désolé d'avoir manqué votre première phrase. mais vous semblez déjà comprendre ce qui se passe. Veuillez vérifier que le fichier objet contenant votre fonction principale est également lié. –

+0

Je pense que vous avez mal tapé comme vous dites gcc et -l en tant que compilateur/option respectivement, mais cela ne se reflète pas dans votre commande. Lequel est correct dans ce que vous faites? – Suroot

Répondre

2

Je pense qu'il est censé être:

g++ *.o -L. -lboost_regex-gcc -o sairay.out -static 
0

Vous avez apparemment oublié d'inclure le fichier objet de votre application qui définit la fonction main. Peut-être que vous avez tapé g++ myapp.cpp au lieu de g++ -c myapp.cpp (pour créer un fichier objet au lieu d'un binaire déjà prêt)?

Une bibliothèque statique n'est vraiment pas beaucoup plus qu'une simple archive de nombreux ou de quelques fichiers objets (archivés par l'utilitaire ar) avec un index de table de symboles attaché pour les recherches rapides. Donc, si vous incluez les fichiers objet manuellement dans le lien, je pense que c'est essentiellement la même chose.

la solution suivante pour afficher les fichiers objet qu'il contient

ar tv libboost_regex-gcc-1_37.a 
Questions connexes