2009-08-14 15 views
0

UPDATE: Es wurde eine Möglichkeit gefunden, die Kompilierung durchzuführen, siehe unten.Probleme beim Kompilieren von Boost-Programmen mit Cygwin

Hallo, ich habe Probleme beim Kompilieren von Programmen unter cygwin. Ich habe die Standard-Boost und G ++ - Pakete von der Setup.exe des Cygwin-Projekts installiert.

Auf meinen Linux-Systemen kann ich ein Programm reg.cpp mit dem kompilieren folgenden:

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

auf Cygwin mich dies nur ein bisschen bearbeiten müssen:

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

Das Problem ist, dass Die Cygwin-Version bewirkt, dass der Linker eine Million nicht definierter Referenzfehler aufruft. Dasselbe passiert beim Versuch, die Boost-Test-Framework-Bibliotheken zu verwenden.

Der Linker findet boost_regex-gcc-mt, aber es scheint nicht mit der Include-Datei übereinzustimmen. Hier ist der erste Linker-Fehler:

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

So übersetzen

ich eine Lösung gefunden here zu kompilieren, habe ich folgendes:

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

Nach Angaben der Post, hat es etwas mit der Linker-Reihenfolge zu tun. Jeder hat eine Ahnung, warum das bei Cygwin so ist, aber nicht bei modernem Linux?

Antwort

2

Es stellt sich heraus, dass Linker traditionell Bibliotheken von rechts nach links verarbeiten. Die meisten Linker kümmern sich nicht um die Platzierung der Bibliothek, aber Cygwin tut es. Also muss die boost_regex-Bibliothek am Ende gehen.

0

Wenn Sie am Beispiel der Boost-Dokumentation aussehen (Getting Started):

Der Befehl auf Cygwin sollte sein:

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

(Die Bibliothek ist nach der CPP-Datei enthalten.) FALSCH:

g++ -o example.exe -lboost_regex-mt example.o 
Verwandte Themen