【问题标题】:Boost 1.56 with QT creator, "LNK1104: cannot open file 'libboost_unit_test_framework-vc100-mt-gd-1_56.lib'"使用 QT 创建器提升 1.56,“LNK1104:无法打开文件 'libboost_unit_test_framework-vc100-mt-gd-1_56.lib'”
【发布时间】:2014-10-16 13:39:24
【问题描述】:

我正在使用 QT creator 开发一个 boost 单元测试框架项目。我写了一个小测试程序并试图链接libboost_unit_test_framework-vc100-mt-gd-1_56.lib。该库位于指定路径。但程序无法编译,给出上述链接错误。

我在网上搜索发现,错误应该是#define BOOST_ALL_NO_LIB。但是,我得到以下错误:

main.obj:-1: error: LNK2019: unresolved external symbol "class boost::unit_test::test_suite * __cdecl init_unit_test_suite(int,char * * const)" (?init_unit_test_suite@@YAPAVtest_suite@unit_test@boost@@HQAPAD@Z) referenced in function _main

上述函数是libboost_unit_test_framework-vc100-mt-gd-1_56.lib的一部分。

我使用 VS 2010 和相同的 boost 库编写了相同的单元测试。该程序可以正常运行并具有预期的行为。

在 QT 上使用 boost 可能会出现什么问题?

【问题讨论】:

  • 我刚刚遇到了同样的问题。你得到答案了吗?
  • 如果 Qt Creator 使用 MinGW 作为编译器......这就是问题所在。 MinGW 不适用于 .lib 文件,仅适用于 .a 文件。在这种情况下,您需要使用 MinGW 编译 Boost 以生成 .a 文件。
  • 我该怎么做? @karlphillip
  • @karlphillip MinGW 与*.lib (proof) 完美配合。看error: LNK2019我可以说反正不是MinGW。
  • @BurninatorDor 向我们展示您的项目文件和一些代码

标签: c++ qt boost qt-creator qt5


【解决方案1】:

您缺少测试模块初始化功能。在包含 UTF 标头之前,您是否定义了 BOOST_TEST_MAINBOOST_TEST_MODULE

要自动生成一个空的测试模块初始化函数,您需要在包含 boost/test/unit_test.hpp 头文件之前定义 BOOST_TEST_MAIN。此定义的值被忽略。或者,您可以将宏 BOOST_TEST_MODULE 定义为等于任何字符串(不一定在引号中)。该宏导致与 BOOST_TEST_MAIN 相同的结果,此外宏值成为主测试套件的名称。

对于由多个源文件组成的测试模块,您只需在单个测试文件中定义这些标志。否则你会得到初始化函数的多个实例。

更多信息在这里:http://www.boost.org/doc/libs/1_57_0/libs/test/doc/html/utf/user-guide/initialization.html

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 2014-06-21
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多