Google模拟和VCPKG未解决的外部符号错误

Unresolved external symbol error with Google Mock and Vcpkg

本文关键字:外部 符号 错误 未解决 模拟 VCPKG Google      更新时间:2023-10-16

我创建了一个简单的C 测试项目,其中一个模拟类别:

#include <gtest/gtest.h>
#include <gmock/gmock.h>
class TestMock
{
public:
    MOCK_CONST_METHOD0(Method1, void());
};
TEST(Test, Test1)
{
    TestMock mock;
}
int main(int argc, char * argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

我使用Visual Studio 2017(15.3.3)。这是一个带有所有默认设置的X86调试项目。

我已将gtest.lib和gmock.lib添加到链接器中。当我编译和链接时,我会收到此错误:

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
1>ConsoleApplication1.obj : error LNK2001: unresolved external symbol "class testing::internal::Mutex testing::internal::g_linked_ptr_mutex" (?g_linked_ptr_mutex@internal@testing@@3VMutex@12@A)
1>ConsoleApplication1.obj : error LNK2001: unresolved external symbol "class testing::internal::Mutex testing::internal::g_gmock_mutex" (?g_gmock_mutex@internal@testing@@3VMutex@12@A)
1>d:DevelopCPPConsoleApplication1DebugConsoleApplication1.exe : fatal error LNK1120: 2 unresolved externals
1>Done building project "ConsoleApplication1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我已经下载了使用VCPKG的GTEST软件包。它被编译为32位DLL。GTEST工作正常,但是当我实例化模拟类时,我会收到链接错误。我还通过一个CMAKE项目进行了测试,并且遇到了相同的错误。

从穆拉特(Murat皮)的评论中获取:

将" GTEST_LINKED_AS_SHARED_LIBRARY"预处理器定义顿添加到您的项目中。请参阅:github.com/google/googletest/issues/292

这对我有用。