c++ - gtest 和 MinGW 联动

标签 c++ mingw codeblocks googletest linkage

我做了一个简单的 main 来检查 gtest 是否正确链接并出现“ undefined reference ”错误。 main 函数中的第一行抛出对 `testing::InitGoogleTest(int*, char**)' 的 undefined reference 。

#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 编译的库不会导致找不到该库,而是会导致链接错误。

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

关于c++ - gtest 和 MinGW 联动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603163/

相关文章:

C++ 和 IBM 编译器错误?

c - GLFW3 错误 - "WGL: Failed to find a suitable pixel format"

c++ - 适用于 Windows 的 MinGW 编译器,使用 GCC、C99 与 GNU99

c++ - C++ 排序函数中的奇怪之处

c++ - 构建错误 : "cannot find target for file" and "undefined reference"

c++ - LNK2001 未解析的 SHA3 类成员的外部符号

java - 使用 JNI 从 JMS 调用 C++

c++ - 在 C++ 中分配时,我们分配的对象是否被破坏?

c++ - 使用 MinGW GCC 4.5.0 配置 NetBeans 6.9 时遇到问题

c++ - 没有 GTK 包括