1

近三天来,我一直在尝试使用 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。另外,我下载了没有捆绑 MinGW 的 CodeBlocks。

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

1)bootstrap.bat mingw构建 bjam

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

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

4) 添加Boost.Filesystem, Boost.System,Boost.DateTime和(Boost.LogBoost.ThreadBoost.Regex依赖项取自这里)

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.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\libboost_thread -mgw44-mt-1_51.a D:\libs\boost\lib\libboost_regex-mgw44-mt-d-1_51.a D:\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 都在它们应该在的位置,但添加此信息可能很重要。

4

1 回答 1

0

修复了问题。在Mankarse向我询问我检查的 gcc 版本后,它与用于编译库(4.4)的版本相同。我决定升级到最新版本(4.7)再试一次。更新后,我注意到编译后的库名称中仍然mgw44包含它们的名称,这让我认为也许我确实安装了第二个 mingw。

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

如果有人再次遇到此问题并确定他只有一个 mingw,以供将来参考,只需像这样再次检查:

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

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

于 2012-08-22T22:48:11.913 回答