2009-08-14 6 views
0

MISE À JOUR: a trouvé un moyen de la compiler, voir ci-dessous.Problèmes lors de la compilation de programmes d'amplification à l'aide de la fonction cygwin

Bonjour, Je rencontre des problèmes lors de la compilation de programmes boost sous cygwin. J'ai installé les paquets boost et g ++ par défaut à partir du fichier setup.exe du projet cygwin.

Sur mes systèmes Linux, je peux compiler un reg.cpp de programme en utilisant les éléments suivants:

g++ -I/usr/include/boost -lboost_regex -o reg reg.cpp 

Cygwin je dois modifier ce juste un peu:

g++ -I/usr/include/boost-1_33_1 -lboost_regex-gcc-mt -o reg reg.cpp 

Le problème est que la version de cygwin amène l'éditeur de liens à générer un million d'erreurs de référence non définies. La même chose arrive en essayant d'utiliser les bibliothèques de framework de test boost.

L'éditeur de liens trouve boost_regex-gcc-mt, mais il ne semble pas correspondre au fichier include. Voici la première erreur de liens:

undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 

COMMENT COMPILER

J'ai trouvé une solution here Pour compiler, je ne les éléments suivants:

g++ -I/usr/include/boost-1_33_1 reg.cpp -o reg -lboost_regex-gcc-mt 

Selon le poste, il a quelque chose à voir avec l'ordre du linker. Quelqu'un at-il une idée pourquoi cela compte dans cygwin mais pas Linux moderne?

Répondre

2

Il s'avère que les lieurs traitent traditionnellement les bibliothèques de droite à gauche. La plupart des linkers ne se soucient pas du placement de la bibliothèque, mais cygwin le fait. La bibliothèque boost_regex doit donc aller à la fin.

0

Si vous regardez l'exemple de la documentation boost (Getting Started):

La commande sur Cygwin doit être:

g++ -c example.cpp 
g++ -o example.exe example.o -lboost_regex-mt 

(La bibliothèque est inclus après le fichier cpp.) MAL:

g++ -o example.exe -lboost_regex-mt example.o 
Questions connexes