我做了一个简单的主要检查gtest是否正确链接并得到了#34;未定义的引用"错误。 main函数的第一行抛出一个未定义的引用`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项目中,没有任何问题。我还指定了include目录和二进制目录。是否有可能我还需要包含gtest_main.a?
构建日志(我添加了#34; ...&#34;隐藏长链文件夹):
&#34; obj \ Debug gtest \ MainTest.o&#34; -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 to
中测试:: InitGoogleTest(int *,char **)&#39; obj \ Debug gtest \ MainTest.o:在函数Z13RUN_ALL_TESTSv': D:/.../googletest/googletest/include/gtest/gtest.h:2237: undefined reference to
中测试:: UnitTest :: GetInstance()&#39; D:/.../ googletest / googletest / include / gtest / gtest.h:2237:未定义引用`testing :: UnitTest :: Run()&#39;
答案 0 :(得分:1)
我终于找到了!这很棘手:因为我正在使用Windows 7并安装了多个编译器(MinGW的3个版本和TDM的2个版本),我的PATH混乱了。当我使用cmake-gui 3.3时,我使用的是默认编译器,当我安装Code :: Blocks时,它是MinGW 4.7。安装上面提到的所有编译器之后,为更高版本的MinGW更改了默认编译器路径。链接到使用较新版本的MinGW编译的库并没有导致找不到库,而是导致链接错误。
总之,我使用的是同一编译器的两个不同版本。