L’inclusion de boost :: filesystem génère des erreurs de liaison

D’abord, je fais un lien vers boost_system et boost_filesystem.

Mon compilateur est une version personnalisée de MinGW avec GCC 4.3.2

Alors quand j’inclus:

#include "boost/filesystem.hpp" 

Je reçois des erreurs de liaison telles que:

 ..\..\libraries\boost\libs\libboost_system.a(error_code.o):error_code.cpp: (.text+0xe35)||undefined reference to `_Unwind_Resume'| ..\..\libraries\boost\libs\libboost_system.a(error_code.o):error_code.cpp: (.eh_frame+0x12)||undefined reference to `__gxx_personality_v0'| 

Après quelques recherches, je trouve que c’est le plus souvent lorsque vous essayez de lier un programme C ++ à gcc, le compilateur GNU C. Mais j’ai imprimé la commande de compilation exacte que Code :: Blocks est en cours d’exécution, et elle est définitivement liée à g ++.

Si je commente ceci, tout fonctionne bien.

Des idées? En outre, en tant que partie, tout le monde connaît-il un bon endroit pour obtenir des fichiers binarys Windows? Le système de construction me pose des problèmes, j’utilise donc certains fichiers binarys fournis avec ce package personnalisé MinGW.

Ok, j’ai trouvé le problème. C’est un peu compliqué.

GCC devient progressivement plus conforme à la norme IS 14882 dans la twig 4.x. Au fur et à mesure, ils suppriment les fonctionnalités de réclamation non standard obsolètes.

Bien que 4.1.x semble ne les avoir que déconseillés et non supprimés, 4.3.x semble en réalité les avoir supprimés. Cela signifie que les versions 4.3.x et supérieures ont des problèmes de compatibilité avec les versions antérieures compilées dans la twig 3.x (qui utilisaient les fonctionnalités obsolètes et maintenant supprimées).

J’utilisais une combinaison de binarys compilés avec GCC 3.x, 4.1.x et 4.3.x, donc peu importe celui que j’ai utilisé, j’ai obtenu une erreur similaire car au moins un binary vers lequel je me connectais était incompatible avec le compilateur que j’essayais pour le moment.

J’utilise maintenant GCC 4.1.2 et la plupart de mes fichiers binarys ont été compilés avec. Cependant, je n’utilise toujours que quelques binarys de la version 3.x, c’est pourquoi je n’effectue pas la mise à niveau vers la version 4.3.x pour le moment.

J’espère que c’était moins déroutant à lire qu’à écrire …

Cela semble être un bon post traitant de certains problèmes tels qu’ils étaient avec 4.1.x

Fichiers binarys Windows: http://www.boost.org – voir la page “Mise en route” – mais si vous utilisez g ++ sur MingGW, vous ne les souhaitez pas. Un moyen simple de comprendre cela est que MingGW est comme un système d’exploitation intégré à un système d’exploitation, de sorte que vous n’utilisez pas réellement Windows. Ceux que vous avez ont probablement raison.

Je ne suis pas sûr de ce qui se passe avec votre code, cela donne à penser que les fichiers lib ne sont pas liés correctement. Boost nomme ses fichiers lib par eux-mêmes, vous ne devez donc pas les nommer explicitement, mais vous devez avoir les fichiers lib pour être boostés sur le bon chemin (et assurez-vous qu’ils sont également installés / construits, ce qu’ils ne sont peut-être pas). Je ne sais pas trop comment les mettre sur le bon chemin avec g ++ car je n’ai pas utilisé MingGW, je n’ai utilisé que boost avec Visual Studio.