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

Linking Boost libs in CodeBlocks (using MinGW)

本文关键字:使用 MinGW CodeBlocks 中的 Boost 链接      更新时间:2023-10-16

近三天来,我一直在尝试使用mingw使boost库在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'

在人们开始猛烈抨击我之前,我在来这里之前已经找到了问题所在。几乎所有的线程(这里和这里以及其他线程)都说,这个问题源于boost是用编译器构建的,现在我正试图在CodeBlocks中使用另一个不同的编译器。我已经检查了一次又一次,我只有一个MinGW安装可用。我已经检查了我的Path变量,里面没有多余的东西,只有我想使用的MinGW的bin文件夹。我没有任何QT安装,所以没有第二个MinGW。此外,我下载了CodeBlocks,而没有捆绑的MinGW。

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

1) 构建bjam 的bootstrap.bat mingw

2) 此处所述bjam --toolset=gcc "--prefix=<installpath>" install

3) 遵循步骤2)链接中的其余步骤

4) 添加Boost.FilesystemBoost.SystemBoost.DateTimeBoost.ThreadBoost.Regex(Boost.Log的依赖项取自此处)

5) 复制/粘贴此示例

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.exeobj\Debug\main.oD: \libs\boost\lib\libboost_filesystem-mgw44-mt-D_1.51.aD: \libs\boost\lib\libboostrongystem-mgw44-mt-D_1.51.aD: \libs\boost\lib\libboost_date_time-mgw44-mt-D_1-51.aD: \libs\boost\lib\libboost_thread-mgw44-mt-1_51.aD: \libs\boost\lib\libboost_regex-mgw44-mt-D_1-51.aD: \libs\boost\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都在它们应该在的地方,但添加这些信息可能很重要。

修复了该问题。在Mankarse问我关于gcc版本的问题后,我检查了一下,它与编译libs(4.4)时使用的版本相同。我决定升级到最新版本(4.7),然后再试一次。更新后,我注意到编译后的libs名称中仍然有mgw44,这让我觉得可能我确实安装了第二个mingw。

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

为了将来的参考,如果有人再次遇到这个问题,并且确信他只有一个问题,只需像这样再次检查:

  1. 从路径变量中删除带有mingw-exes的bin文件夹

  2. 打开命令提示符并键入g++。如果上面写着类似g++: fatal error: no input files的内容,那么您有多个mingw安装。