vcpkg не работает для теста Google

Я установил и интегрировал последнюю версию 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.

я включен gtest.h в моем проекте в Visual Studio 2015 обновление 3:

#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 автоматически копируется в выходной каталог.

3

Решение

Я думаю, что поведение автосвязи было намеренно отключено для gtest, увидеть vcpkg выпуск № 306.
Оригинальный комментарий к проблеме: Вот.

Реализация vcpkg требует ручного связывания, потому что Google Test может переопределить main()и функциональность gtest дублируется во всех четырех отдельных файлах библиотеки.
Официальная документация.

Требуется для конфигурации проекта:
В: Configuration Properties > Linker > Input > Additional Dependencies
Для релиз-сборок:

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

Для отладочных сборок:

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

Если вы хотите создать свой собственный main (), замените gtest_main.lib с gtest.lib,
Если вы хотите использовать gmock, вы можете заменить его на gmock_main.lib или же gmock.lib,

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]