【问题标题】:gtest and MinGW linkagegtest与MinGW联动
【发布时间】:2016-04-08 18:35:39
【问题描述】:

我做了一个简单的 main 来检查 gtest 是否正确链接并得到“未定义的引用”错误。主函数的第一行抛出一个未定义的对 `testing::InitGoogleTest(int*, char**)' 的引用。

#include <gtest/gtest.h>

int main(int argc, char* argv[])
{
     testing::InitGoogleTest(&argc, argv);
     return RUN_ALL_TESTS();
}

我已经在 cmake 的帮助下成功构建了一个 gtest Code::Block 项目,并且没有 pthread 库。然后,我用 MinGW 编译了所有内容。我拿了 libgtest.a libgmock.a 并将它们链接到我的 Code::Block 项目中,没有任何问题。我还指定了包含目录和二进制目录。我是否也可能需要包含 gtest_main.a?

构建日志(我添加了“...”来隐藏长长的文件夹链):

"obj\Debug gtest\MainTest.o" -lsfml-graphics-sd -lsfml-window-sd -lsfml-network-sd -lsfml-audio-sd -lsfml-system-sd -lglew -lgtest -lgmock - lws2_32 -lopenal32 -lsndfile -lgdi32 -lwinmm -lfreetype -ljpeg -lglu32 -lopengl32 obj\Debug gtest\MainTest.o:在函数main': D:/.../Templates/SFML 2_2 BasicScene/MainTest.cpp:5: undefined reference totesting::InitGoogleTest(int*, char**)' obj\Debug gtest\MainTest.o:在函数Z13RUN_ALL_TESTSv': D:/.../googletest/googletest/include/gtest/gtest.h:2237: undefined reference totesting::UnitTest::GetInstance()' D:/.../googletest/googletest/include/gtest/gtest.h:2237: 未定义对 `testing::UnitTest::Run()' 的引用

【问题讨论】:

  • 要解释链接失败,您必须提供执行失败链接的编译器命令行以及错误消息。在问题中发布此信息。

标签: c++ mingw codeblocks googletest linkage


【解决方案1】:

我终于找到了!这很棘手:当我使用 Windows 7 并安装了多个编译器(MinGW 的 3 个版本和 TDM 的 2 个版本)时,我的 PATH 搞混了。当我使用 cmake-gui 3.3 时,我使用的是默认编译器,当我安装 Code::Blocks 时是 MinGW 4.7。安装上述所有编译器后,默认编译器路径更改为更高版本的 MinGW。链接使用较新版本的 MinGW 编译的库不会导致找不到该库,而是会导致链接错误。

总之,我使用的是同一个编译器的两个不同版本。

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多