vcpkg不适用于Google测试

时间:2016-12-24 18:08:24

标签: c++ visual-studio googletest vcpkg

我安装并集成了最新版本的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.

我安装了google test:

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只说“链接将自动处理”。不知道怎么做。

在我项目的“附加库依赖项”中,我可以看到这些继承的值:

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

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

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

2 个答案:

答案 0 :(得分:6)

我认为main()有意禁用了自动链接行为,请参阅vcpkg issue #306。 关于此问题的原始评论:here

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

每个项目配置所需:
在:Linker&gt; Input&gt; Additional Dependencies&gt; $(VcpkgRoot)lib\manual-link\gtest_main.lib
对于发布版本:

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

对于debug-builds:

gtest_main.lib

如果您要创建自己的自定义主页(),请将gtest.lib替换为gmock_main.lib 如果您想使用gmock,可以将其替换为gmock.lib <android.support.v4.widget.NestedScrollView android:id="@+id/activity_Recipe_detail_scrollview" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> // do what ever you need here </LinearLayout> </android.support.v4.widget.NestedScrollView>

答案 1 :(得分:0)

这是一个旧线程,但我想指出我发现的内容。

您需要在手动链接目录中链接库,但是需要以正确的顺序链接它们。 首先链接gmock_main,然后链接gtest_main。 另一种方法只是导致0测试。