Boost 1.45 mit MinGW... undefined references!?
-
Guten Morgen allerseits,
ich versuche seit einigen Tagen, die Boost Thread Bibliothek als statische Variante zu generieren. Leider funktioniert das nicht wie gewollt. Ich hab's eigentlich schon ein paar mal so gemacht, nur mit der Version 1.44 (bzw. 1.45 aus der SVN-Repo) krieg ich's nicht hin.
Eigentlich mache ich gar nichts Außergewöhliches - ich lade mir Boost und Bjam runter und führe dann Letzteres so aus:
bjam --build-dir=/blah/ toolset=gcc --with-thread runtime-link=static link=staticIch bekomme auch die gewünschten Dateien kompiliert und gelinkt. Wenn ich jetzt nicht total daneben liege, dann steht das Postfix '-mt-s[d]' ja für die statische Variante.
Alles schön und gut, aber wenn ich nun die Bibliothek linke, dann bekomme ich nichts außer lauter undefined references. Es scheint, da ist gar nichts drin!?
MinGW-Update auf 4.5 hab ich ebenfalls versucht. Boost als 64-Bit-Variante klappt gar nicht, ansonsten hat es aber nicht geholfen.
Es wär wirklich nett, wenn Ihr mir weiterhelfen könnten, stehe hier ganz schön auf dem Schlauch..
/* EDIT */
So, jetzt hab ich's gerade nochmal versucht (Boost-Version 1.45, MinGW/GCC Version 4.5 sowohl 32 als auch 64 Bit).
Ich bekomme folgende Linker-Errors (trotz korrekt gelinkter statischer Bibliothek):
I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:27: undefined reference to `_imp___ZN5boost6thread4joinEv' I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:28: undefined reference to `_imp___ZN5boost6thread4joinEv' I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:26: undefined reference to `_imp___ZN5boost6threadD1Ev' I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:25: undefined reference to `_imp___ZN5boost6threadD1Ev' I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:26: undefined reference to `_imp___ZN5boost6threadD1Ev' I:/Programmieren/Cpp/Projects/a/Dev/Build/Test/main.cpp:25: undefined reference to `_imp___ZN5boost6threadD1Ev'Ist doch Quatsch, ich hab sie doch verlinkt! Ich versteh einfach nicht, was ich da falsch mache...
/* Edit */
Hab's gefunden. Ich musste einerseits in meinem Programm noch BOOST_THREAD_USE_LIB definieren, zudem noch, um einen Bug im SVN-Tracker auszumerzen (https://svn.boost.org/trac/boost/ticket/4258) eine kleine Modifikation in der tss_pe.cpp vornehmen.
Juhuu!

-
Wow, vielen Dank für den Tipp. Hab genau das gleiche Problem und das hier hat mich gerade vorm Wahnsinn gerettet

-
So, hab mich noch schnell registriert, so krieg ich auch mit falls es hier noch weitere Fragen gibt

-
@TdZ Ein riesengroßes Dankeschön für deinen Edit,
ich hing gestern den ganzen Tag an diesem Problem fest, hab dann irgendwann das statische Linken aufgegeben und es dynamisch versucht, womit ich wenigstens ein lauffähiges Programm hatte dass aber dann leider abgestürzt ist, sobald eine Exception geworfen wurde (auch wenn diese im selben Thread gefangen werden sollte).
Am Ende des Tages war ich dann soweit, dass ich auf Threading mit wxWidgets umsteigen wollte.
Naja: mit dem Fix aus dem Trac und der Option BOOST_THREAD_USE_LIB kann ich jetzt endlich statisch linken, und das exception Handling funktioniert auch wie gewünscht!