繁体   English   中英

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

[英]Linking Boost libs in CodeBlocks (using MinGW)

在将近三天的时间里,我一直在尝试使用mingw在CodeBlocks中使boost库正常工作。 在我自己设法解决的许多问题之间,现在我被困住了,这使我发疯。

我用不同的标志发送给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。 另外,我下载了没有捆绑的MinGW的CodeBlocks。

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

1) bootstrap.bat mingw构建bjam

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

3)按照步骤2)中的链接执行其余步骤

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

5)复制/粘贴此示例

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

mingw32-g ++。exe-墙-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 \\ Debug \\ main.o D:\\ libs \\ boost \\ lib \\ libboost_filesystem-mgw44-mt-d-1_51.a D:\\ libs \\ boost \\ lib \\ libboost_system-mgw44-mt-d-1_51.a D:\\ libs \\ boost \\ lib \\ libboost_date_time-mgw44-mt-d-1_51.a D:\\ libs \\ boost \\ lib \\ lib \\ libboost_thread -mgw44-mt-1_51.a D:\\ libs \\ boost \\ lib \\ libboost_regex-mgw44-mt-d-1_51.a D:\\ libs \\ boost \\ lib \\ 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),然后重试。 更新后,我注意到编译的库的名称中仍然mgw44 ,这使我认为也许确实有第二个mingw安装。

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

供以后参考,如果有人再次遇到此问题并确定他只有一个混血儿,只需再次检查如下:

  1. 从您的Path变量中删除带有mingw exes的bin文件夹

  2. 打开命令提示符,然后键入g++ 如果它显示类似g++: fatal error: no input files则说明您安装了多个mingw。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM