2010-11-10 5 views
0

J'essaye de porter/construire une partie de mon code écrit pour gcc (sous linux) en tant que DLL sur Windows. J'ai d'abord essayé de construire sous VC++ mais il y avait tellement d'erreurs/avertissements (principalement dans les propres fichiers include de VC, ce qui n'avait pas vraiment de sens pour moi :)) j'ai donc installé MinGW distro (qui inclut les bibliothèques Boost). La compilation s'est déroulée sans problème, mais la liaison a échoué avec des références non définies aux fonctions des bibliothèques boost. Le paramètre "-t" a montré que l'éditeur de liens n'utilisait pas réellement les bibliothèques boost pour une raison quelconque (oui, le chemin -L est correct, les bibliothèques sont là, l'éditeur de liens ne se plaint pas quand j'utilise -l). Après beaucoup de recherches, j'ai découvert que l'ordre est le problème, que je dois placer mes paramètres -l après tous mes fichiers .o (à cause des dépendances). Cela semblait résoudre tous les problèmes sauf une référence non définie à la bibliothèque de threads. Encore une fois -t a montré que cette bibliothèque n'est en fait pas utilisée par l'éditeur de liens (pas dans la liste) les autres sont (j'utilise aussi boost_system et boost_date_time). J'ai joué à nouveau avec l'ordre des paramètres mais le résultat était le même. Une idée de ce qui me manque?Problème liant le code C++ en utilisant boost avec mingw

L'erreur est:

c:/x5/cpp/build//timed_cond.o:timed_cond.cpp:(.text$_ZN5boost6detail24basic_condition_variable7do_waitINS_11unique_lockINS_5mutexEEEEEbRT_NS0_7timeoutE[bool boost::detail::basic_condition_variable::do_wait<boost::unique_lock<boost::mutex> > (boost::unique_lock<boost::mutex>&, boost::detail::timeout)]+0x246): undefined reference to `_imp___ZN5boost11this_thread18interruptible_waitEPvNS_6detail7timeoutE' 

J'utilise même les versions de la bibliothèque Boost (1.44.0) sur les deux plates-formes

Répondre

1

Ok, j'ai trouvé la réponse. On dirait que le problème est dans les bibliothèques boost qui sont statiques dans MinGW-distro. Normalement, ils sont configurés pour être liés dynamiquement et cela a causé le problème ci-dessus. This la réponse l'explique ...