代码之家  ›  专栏  ›  技术社区  ›  Benoît Dubreuil

gtest和MinGW链接

  •  0
  • Benoît Dubreuil  · 技术社区  · 8 年前

    我做了一个简单的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编译了所有内容。我做了测试。一个libgmock。a并将它们链接到我的Code::Block项目中,没有问题。我还指定了include目录和二进制目录。我是否需要包含gtest_main。a也是?

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

    “obj\Debug gtest\MainTest.o”-lsfml-graphics-s-d-lsfml-fwindows-s-d/lsfml-network-s-d-lsfml-audio-s-d-lsfml-system-s-d-lglew-lgtest-lgmock-lws2_32-lpenal32-lsndfile-lgdi32-lwinmm-lfreetype-ljpeg-lglu32-lopengl32 对象\调试测试\主测试。o: 在功能中 main': D:/.../Templates/SFML 2_2 BasicScene/MainTest.cpp:5: undefined reference to 测试::InitGoogleTest(int*,char**)' 对象\调试测试\主测试。o: 在功能中 Z13RUN_ALL_TESTSv': D:/.../googletest/googletest/include/gtest/gtest.h:2237: undefined reference to 测试::UnitTest::GetInstance()' D: /…/googletest/googletest/include/gtest/gtest。h: 2237:未定义对“testing::UnitTest::Run()”的引用

    1 回复  |  直到 8 年前
        1
  •  1
  •   Benoît Dubreuil    8 年前

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

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