包括boost :: filesystem会产生链接错误

时间:2009-01-29 06:57:53

标签: c++ gcc boost linker mingw

首先,我正在链接到boost_system和boost_filesystem。

我的编译器是custom build of MinGW with GCC 4.3.2

所以当我包括:

#include "boost/filesystem.hpp"

我收到链接错误,例如:

..\..\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'|

经过一番搜索,我发现最常见的是当你尝试将C ++程序与gcc(GNU C编译器)链接起来时。但是我打印出Code::Blocks正在运行的确切构建命令,它肯定与g ++链接。

如果我发表评论,那么一切正常。

有什么想法吗?另外,作为一方,任何人都知道一个获得Windows二进制文件的好地方吗?构建系统给了我一些问题,所以我使用了custom MinGW package

附带的一些二进制文件

2 个答案:

答案 0 :(得分:2)

好的,我发现了问题。这有点令人费解。

GCC在4.x分支中逐渐变得更符合IS 14882标准。随着他们的继续,他们正在删除已弃用的非标准投诉功能。

虽然4.1.x似乎只是将它们弃用并且未被删除,但4.3.x似乎实际上已将它们删除。这意味着4.3.x及更高版本与3.x分支中编译的东西有一些向后兼容性问题(使用已弃用且现已删除的功能)

我正在使用已经使用GCC 3.x,4.1.x和4.3.x编译的二进制文件的混合和匹配组合,所以无论我使用哪一个,我都有类似的错误,因为至少有一个二进制文件我链接到与我目前正在尝试的编译器不兼容。

我现在正在使用GCC 4.1.2,我的大多数二进制文件都是用它编译的。我仍然使用3.x中的一些二进制文件,这就是为什么我还没有升级到4.3.x.

希望阅读比写作更容易让人感到困惑......

This似乎是一篇很好的文章,解决了4.1.x中的一些问题

答案 1 :(得分:0)

Windows二进制文件:www.boost.org - 请参阅“入门”页面 - 但如果您在MingGW上使用g ++,则不需要这些。理解它的一个简单方法是,MingGW就像操作系统中的操作系统,所以实际上你并没有真正使用Windows。你得到的那些可能是正确的。

不知道你的代码发生了什么,听起来像lib文件没有以某种方式正确链接。 Boost自己命名它的lib文件,所以你实际上并没有明确命名它们,但是你必须在正确的路径上使用lib文件进行提升(并确保它们也被安装/构建,它们可能不是)。我不确定如何使用g ++将它们放在正确的路径上,因为我没有使用过MingGW,我只使用了Visual Studio中的boost。