[英]Problem with linking Boost 1.79 libs, builded with MinGW GCC, with CMake on Windows
[英]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.Filesystem
, Boost.System
, Boost.DateTime
, Boost.Thread
和Boost.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.omingw32-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重新构建增强后,错误消失了。
供以后参考,如果有人再次遇到此问题并确定他只有一个混血儿,只需再次检查如下:
从您的Path变量中删除带有mingw exes的bin文件夹
打开命令提示符,然后键入g++
。 如果它显示类似g++: fatal error: no input files
则说明您安装了多个mingw。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.