在CodeBlocks中链接Boost库(使用MinGW)

时间:2012-08-22 11:46:36

标签: c++ boost mingw

现在差不多三天了,我一直在尝试使用mingw在CodeBlocks中正常工作。在我自己设法解决的许多问题之间,现在我被困住了,这让我很生气。

我已经多次构建了库,并将不同的标志发送到bjam,但每次在CodeBlocks中使用这些库时,我都会得到相同的结果。很多行

undefined reference to `___gxx_personality_sj0'
undefined reference to `__Unwind_SjLj_Register'
undefined reference to `__Unwind_SjLj_Resume'
undefined reference to `__Unwind_SjLj_Unregister'

在人们开始抨击我之前,我在来这里之前已经找到了问题。几乎所有的线程(herehere和其他人)都说这个问题来自于boost是用编译器构建的,现在我试图在CodeBlocks中使用另一个不同的编译器。我一次又一次地检查,我只有一个MinGW安装可用。我已经检查了我的Path变量并且没有任何不需要的内容,只有我想要使用的MinGW的bin文件夹。我没有任何QT安装,因此没有第二个MinGW。另外,我下载了CodeBlocks 没有捆绑的MinGW。

下面我将列出我采取的步骤:

1)构建bjam的bootstrap.bat mingw

2)bjam --toolset=gcc "--prefix=<installpath>" installhere

所述

3)按照步骤2)的链接中的其余步骤进行操作

4)添加Boost.FilesystemBoost.SystemBoost.DateTimeBoost.ThreadBoost.Regex(来自here的Boost.Log的依赖关系)< / p>

5)复制/粘贴this example

我尝试构建时CodeBlocks使用的命令:

  

mingw32-g ++。exe -Wall -fexceptions -g
  -ID:\ libs \ boost \ include \ boost-1_51 -c D:\ example \ example \ main.cpp -o obj \ Debug \ main.o

     

mingw32-g ++。exe -LD:\ libs \ boost \ lib -o bin \ Debug \ example.exe   OBJ \调试\ main.o   d:\库\提升\ LIB \ libboost_filesystem-mgw44-MT-d-1_51.a   d:\库\提升\ LIB \ libboost_system-mgw44-MT-d-1_51.a   d:\库\提升\ LIB \ libboost_date_time-mgw44-MT-d-1_51.a   d:\库\提升\ LIB \ libboost_thread-mgw44-MT-1_51.a   d:\库\提升\ LIB \ libboost_regex-mgw44-MT-d-1_51.a   d:\库\提高\ lib中\ libboost_log_setup-mgw44-MT-d-1_51.a

还有什么可能是造成这种情况的?

后来添加:

CodeBlocks工具链可执行文件是:

c++ compiler: mingw32-g++.exe
linker for dynamic libs: mingw32-g++.exe
linker for static libs: ar.exe

所有.EXE都应该是它们的位置,但添加此信息可能很重要。

1 个答案:

答案 0 :(得分:0)

修正了问题。在Mankarse向我询问我检查的gcc版本后,它与用于编译libs(4.4)的版本相同。我决定升级到最新版本(4.7)并再试一次。更新后,我注意到编译后的libs名字中仍然有mgw44,这让我觉得可能还有第二次mingw安装。

在检查了我在Path变量中的每个文件夹后,我得出结论,几周前我安装的Strawberry Perl也捆绑了一个版本的gcc。在我删除它并从sctratch重建增强后,错误就消失了。

如果有人再次遇到此问题且确定他只有一个mingw,请再次检查,以备将来参考:

  1. 从路径变量

  2. 中删除包含mingw exes的bin文件夹
  3. 打开命令提示符并键入g++。如果它说g++: fatal error: no input files之类的东西,那么你有多个mingw安装。