gpt4 book ai didi

c++ - vcpkg 不适用于谷歌测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:39 34 4
gpt4 key购买 nike

我安装并集成了最新版本的 vcpkg:

e:\work\vcpkg>vcpkg version
Vcpkg package management program version 0.0.65-692a363701156f1bc319306fbde93fb6748325f6

See LICENSE.txt for license information.

e:\work\vcpkg>vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

我安装了谷歌测试:

e:\work\vcpkg>vcpkg list
gtest:x64-windows 1.8 GoogleTest and GoogleMock testing frameworks.
gtest:x86-windows 1.8 GoogleTest and GoogleMock testing frameworks.

我在 Visual Studio 2015 Update 3 的项目中包含了 gtest.h:

#include <gtest/gtest.h>

它编译正常,但我有链接器错误:

1>main.obj : error LNK2001: unresolved external symbol "void __cdecl testing::InitGoogleTest(int *,char * *)" (?InitGoogleTest@testing@@YAXPEAHPEAPEAD@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: int __cdecl testing::UnitTest::Run(void)" (?Run@UnitTest@testing@@QEAAHXZ)
1>main.obj : error LNK2001: unresolved external symbol "public: static class testing::UnitTest * __cdecl testing::UnitTest::GetInstance(void)" (?GetInstance@UnitTest@testing@@SAPEAV12@XZ)

显然,Visual Studio 不知道它应该与 gtest.lib 链接。我不明白为什么。 Vcpkg 只说“链接将自动处理”。不知道它将如何执行此操作。

在我项目的“Additional Library Dependencies”中,我可以看到这些继承值:

$(VcpkgRoot)lib
$(VcpkgRoot)lib\manual-link

并且 $(VcpkgRoot) 被解析为 e:\work\vcpkg\installed\x64-windows\。所以看起来整合是成功的。但是 Visual Studio 如何知道它应该与 gtest.lib 链接?

请注意,如果我手动将 gtest.lib 添加到“附加依赖项”,一切正常,并且 gtest.dll 会自动复制到输出目录。

最佳答案

我认为 gtest 的自动链接行为已被故意禁用,参见 vcpkg issue #306 .问题原评论:here .

vcpkg 实现需要手动链接,因为 Google Test 可以重新定义 main(),并且 gtest 功能在所有四个单独的库文件中都是重复的。
Official documentation .

每个项目所需的配置:
在:配置属性 > 链接器 > 输入 > 附加依赖项
对于发布构建:

$(VcpkgRoot)lib\manual-link\gtest_main.lib

对于调试构建:

$(VcpkgRoot)debug\lib\manual-link\gtest_main.lib

如果您想创建自己的自定义 main(),请将 gtest_main.lib 替换为 gtest.lib
如果要使用gmock,可以将其替换为gmock_main.libgmock.lib

关于c++ - vcpkg 不适用于谷歌测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41315739/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com