现在差不多三天了,我一直在尝试使用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'
在人们开始抨击我之前,我在来这里之前已经找到了问题。几乎所有的线程(here和here和其他人)都说这个问题来自于boost是用编译器构建的,现在我试图在CodeBlocks中使用另一个不同的编译器。我一次又一次地检查,我只有一个MinGW
安装可用。我已经检查了我的Path
变量并且没有任何不需要的内容,只有我想要使用的MinGW的bin文件夹。我没有任何QT安装,因此没有第二个MinGW。另外,我下载了CodeBlocks 没有捆绑的MinGW。
下面我将列出我采取的步骤:
1)构建bjam的bootstrap.bat mingw
2)bjam --toolset=gcc "--prefix=<installpath>" install
如here
3)按照步骤2)的链接中的其余步骤进行操作
4)添加Boost.Filesystem
,Boost.System
,Boost.DateTime
,Boost.Thread
和Boost.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.omingw32-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都应该是它们的位置,但添加此信息可能很重要。
答案 0 :(得分:0)
修正了问题。在Mankarse
向我询问我检查的gcc版本后,它与用于编译libs(4.4)的版本相同。我决定升级到最新版本(4.7)并再试一次。更新后,我注意到编译后的libs名字中仍然有mgw44
,这让我觉得可能还有第二次mingw安装。
在检查了我在Path变量中的每个文件夹后,我得出结论,几周前我安装的Strawberry Perl也捆绑了一个版本的gcc。在我删除它并从sctratch重建增强后,错误就消失了。
如果有人再次遇到此问题且确定他只有一个mingw,请再次检查,以备将来参考:
从路径变量
打开命令提示符并键入g++
。如果它说g++: fatal error: no input files
之类的东西,那么你有多个mingw安装。