gtest 和 MinGW 联动

gtest and MinGW linkage

我做了一个简单的 main 来检查 gtest 是否正确链接并出现 "undefined reference" 错误。主函数的第一行抛出一个未定义的引用`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-s-d -lsfml-window-s-d -lsfml-network-s-d -lsfml-audio-s-d -lsfml-system-s-d -lglew -lgtest -lgmock -lws2_32 -lopenal32 -lsndfile -lgdi32 -lwinmm -lfreetype -ljpeg -lglu32 -lopengl32 obj\Debug gtest\MainTest.o: In function main': D:/.../Templates/SFML 2_2 BasicScene/MainTest.cpp:5: undefined reference totesting::InitGoogleTest(int*, char**)' obj\Debug gtest\MainTest.o: In function Z13RUN_ALL_TESTSv': D:/.../googletest/googletest/include/gtest/gtest.h:2237: undefined reference totesting::UnitTest::GetInstance()' D:/.../googletest/googletest/include/gtest/gtest.h:2237: undefined reference to `testing::UnitTest::Run()'

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

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