0

我正在使用 Qt Creator 编写一个小型 C++ 程序(带有 GUI)并使用 MinGW 进行编译。当我在调试模式下编译项目时一切正常,但是一旦我进入发布模式,我就会得到编译器错误:

undefined reference to 'std::out_of_range::~out_of_range()'         thread.cpp

当我点击错误时,我也得到:

File not found: thread.cpp

我查看了我的 Boost 安装并找到了 thread.cpp,它应该在我的项目的包含路径上。

有任何想法吗?

编辑:这是我的 .pro 文件:

#-------------------------------------------------
#
# Project created by QtCreator 2012-08-10T12:09:39
#
#-------------------------------------------------

QT       += core gui

TARGET = GeneDropWin
TEMPLATE = app

SOURCES += main.cpp \
    genedrop.cpp \
    mainbody.cpp \
    biofunctions.cpp \
    fileio.cpp \
    settings.cpp

HEADERS  += genedrop.h \
    geneclasses.h \
    paramclass.h \
    mainbody.h \
    biofunctions.h \
    fileio.h \
    geneclasses.h \
    settings.h

FORMS    += genedrop.ui \
    settings.ui

#Stuff I've added
INCLUDEPATH += "C:\\Program Files\\boost_1_50_0"
LIBS += -L"C:\\Program Files\\boost_1_50_0\\stage\\lib" -lboost_thread-mgw46-mt-1_50 -lboost_system-mgw46-mt-1_50 -lboost_date_time-mgw46-mt-1_50 -lboost_chrono-mgw46-mt-1_50
CONFIG += static \
    release

RESOURCES += \
    NIABLogo.qrc
4

1 回答 1

0

好的,问题已解决,但可能还没有完全理解。我通过将编译器切换到 MSVC 并更改链接器选项的语法(例如 -lboost_thread-mgw46-mt-1_50 -> -llibboost_thread-vc100-mt-1_50)来修复它,现在编译没有问题。我将就我认为可能是问题的原因提出我的推理,但如果错了,我将不胜感激:

  1. 虽然我认为我在查看安装时已经使用 MinGW 构建了 Boost 库,但我发现许多文件夹提到了 msvc(例如 ...boost\bin.v2\libs\date_time\build_msvc-10.0),这表明我已经用 MSVC 构建了它。
  2. 链接器错误声称无法找到与 thread.cpp 关联的文件。
  3. 查看构建目录的线程文件夹,所有 .obj 和 .lib 文件的路径中都有 msvc-10.0 文件夹。
  4. 因此,我认为 MinGW 编译器正在寻找一个不存在的 MinGW 文件夹中的 boost 对象,因此失败了。我猜它在调试模式下工作的事实与对文件的限制较少有关。
于 2012-08-20T13:12:58.010 回答