我在Windows10上开始使用Gtest和Gmock时遇到问题。我通常在Linux上工作,但想切换到Windows并遇到问题。
我根据文档(使用Cmake和Visual Studio)设法构建了Gmock和Gtest。我在适当的目录中有gmock.lib和gtest.lib文件。但是当我想将它们链接到我的测试程序时,我可以看到许多类型为“未定义引用”的错误。
我使用的命令是:
g++ "-LC:\\Users\\jacek\\cpp\\googletest\\googlemock\\Debug" "-LC:\\Users\\jacek\\cpp\\googletest\\googlemock\\gtest\\Debug" -o HelloWorld "src\\counter.o" "src\\counter_test.o" -lgmock -lgtest
错误例如是:
C:\Users\jacek\workspace\HelloWorld\Debug/../src/counter_test.cpp:14: undefined reference to testing::Message::Message()' C:\Users\jacek\workspace\HelloWorld\Debug/../src/counter_test.cpp:14: undefined reference to testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)'
我尝试搜索这个并发现也许我应该构建共享库。我用适当的选项重建gmock和gtest,现在我也有dll文件,但是我仍然收到相同的错误。
我在这里做错了什么?
Linux上的库命名方式与Windows不同,这是一个问题吗? (libgmock.a vs gmock.lib)我应该将命令中的某些内容更改为g ++吗?
我粘贴的路径很好,文件在那里(否则错误会有所不同)。
我在这里缺少什么?
答案 0 :(得分:3)
除了你的正确答案: 如果你想使用外部库(如gmock或gtest),你必须使用相同的编译器编译库和你的程序。这就是为什么你的程序使用未定义的引用抛出错误的原因。在visual studio中有MSVC编译器。如果你想使用VS,那么只需用VS编译你的程序。 而且这还不是全部,您必须使用相同的编译器和相同的设置(例如在调试模式下编译)
我只想将此添加到您的答案中。因为你写道:
事实证明我无法使用Visual Studio
编译库
这是错误的,您可以使用VS编译库,但是您无法将它们与您的程序相关联。也许这已经很清楚,那么请原谅我的答案。
答案 1 :(得分:1)
好的,我解决了这个问题。事实证明,我无法使用Visual Studio编译库,然后将其与G ++一起使用。我不得不改用不同的方法,这段视频非常有用:https://www.youtube.com/watch?v=y9sGAF1k63o&list=PL0SUKxlBaq1COi52nuq2lPf6AbMRrn2LI&index=7
该视频教授如何在Eclipse中使用gtest但不使用库,而是从gtest脚本中融合cpp和h文件。它工作正常。我遇到的唯一问题是我安装了python 3.5版本,并且在某些情况下它与“fuse”脚本中使用的python 2.7不兼容,但我设法快速纠正了这几个案例并使其正常工作。