标签: vcpkg

Google Mock 和 Vcpkg 未解决的外部符号错误

我用一个模拟类创建了一个简单的 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();
}
Run Code Online (Sandbox Code Playgroud)

我使用 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:\Develop\CPP\ConsoleApplication1\Debug\ConsoleApplication1.exe : fatal error LNK1120: …
Run Code Online (Sandbox Code Playgroud)

c++ gmock vcpkg

7
推荐指数
1
解决办法
3483
查看次数

如何在 Visual Studio 中静态链接 VCPKG 生成的 .lib 文件

例如,我使用 VCPKG 构建第三方库,例如 libcurl。我有动态和静态构建。显然,import .lib 和 object .lib 文件分别包含在两个不同的文件夹中,x64-windows 和 x64-windows-static。我想将对象 libcurl.lib 与我的程序静态链接,但无法弄清楚如何配置 Visual Studio 来做到这一点。它总是最终使用导入库,而不是对象库,因此我的程序最终在执行时需要 libcurl.dll。

我已将主项目配置为使用 /MT 运行时库。我尝试将链接器配置为使用指向静态 lib 文件夹和其他依赖项的附加库文件夹。我什至尝试在链接器附加依赖项中使用对象 libcurl.lib 文件的完整路径。

当我使用 /MT 切换运行时库时,我可以通过使用 Dependency Walker 判断所有常规库(如 vcruntime)都集成在可执行文件中,而不是作为 DLL 加载,但 libucurl.dll 仍然存在,动态加载。

似乎由于 VCPKG 自动包含路径集成,Visual Studio 总是首先找到并使用导入 libcurl.lib,即使我在链接器输入中指定了对象 libcurl.lib 的完整路径。

如何配置 Visual Studio 以静态链接正确的 .lib 文件?

linker static visual-studio vcpkg

7
推荐指数
1
解决办法
2321
查看次数

如何将Linux中的vcpkg与交叉构建工具链以及sysroot集成?

我的问题是,如何将 Linux 中的 vcpkg 与交叉构建工具链以及 sysroot 集成?例子:

  • 构建机器是fedora30
  • 交叉构建工具链是x86_64-centos7-gnu

来自https://github.com/microsoft/vcpkg快速入门 说:

> git clone https://github.com/Microsoft/vcpkg.git
> cd vcpkg

PS> .\bootstrap-vcpkg.bat
Linux:~/$ ./bootstrap-vcpkg.sh
Run Code Online (Sandbox Code Playgroud)

在我的机器上,我安装了 gcc 9.1,它被vcpkgbootstrap.sh 检测到并且工作正常;

同时,我构建了一个用于交叉构建的工具链,它位于$HOME/cross/x64_86-centos7-linux-gnu/

如何设置另一个vcpkg使用特定工具链的目录树?

通过“使用”,我的意思是 vcpkg 及其所有包都应该由该工具链编译,并且使用 vcpkg 的 toolchain_file '$vcpkg_home/scripts/buildsystems/vcpkg.cmake' 的项目都应该将该工具链作为 $CC 和构建工具集?

linux cmake vcpkg

7
推荐指数
1
解决办法
5101
查看次数

vcpkg 与 MinGW?

我喜欢 vcpkg 的想法,但我想我更愿意坚持使用 MinGW 作为我的编译器。

我找不到任何关于是否可以设置(或如何设置)vcpkg 以便它为 MinGW 而不是 MSVC 编译包的资源。如果可能的话,有人能给我指出正确的方向吗?

有一些关于此的主题,但它们没有明确的说明,而且我仍在学习这些东西。

谢谢!

mingw vcpkg

7
推荐指数
1
解决办法
5953
查看次数

如何更新vcpkg本身?

我已经安装了 vcpkg,一个 C++ 包管理器。现在过了一段时间,我想更新一下。我怎样才能做到这一点?我需要卸载并重新安装吗?

vcpkg

7
推荐指数
2
解决办法
1万
查看次数

VCPKG windows、windows-static 和 other 之间的区别

我使用时有什么区别

  1. vcpkg install <any package>:x64-windows
  2. x64-windows-static
  3. x64-windows-static-md

vcpkg

7
推荐指数
1
解决办法
3645
查看次数

如何为 CMake 提供 vcpkg 信息?

假设我已经安装了一些库vcpkg并且它有很多依赖(比如cgal)。现在我想用CMake.

我应该如何知道CMake我下载的所有库的所有位置?包括我安装的主库?我在 中只有一个设置CMake,称为“源目录”,它将指向我的代码。图书馆的设置在哪里?


D:\Users\ThirdPartyDesign\CGAL-5.0-examples\CGAL-5.0\examples\Triangulation_2
? env | grep CMAKE
CMAKE_TOOLCHAIN_FILE=D:\Users\ThirdPartyDesign\vcpkg\scripts\buildsystems\vcpkg.cmake



D:\Users\ThirdPartyDesign\CGAL-5.0-examples\CGAL-5.0\examples\Triangulation_2
? cmake .
CMake Warning at CMakeLists.txt:18 (find_package):
  By not providing "FindCGAL.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "CGAL", but
  CMake did not find one.

  Could not find a package configuration file provided by "CGAL" with any of
  the following names:

    CGALConfig.cmake
    cgal-config.cmake

  Add the installation prefix of "CGAL" to …
Run Code Online (Sandbox Code Playgroud)

c++ cmake vcpkg

6
推荐指数
2
解决办法
5812
查看次数

如何使用具有不同三元组的 vcpkg 包?

我有一个使用 2 个不同包的项目,pkgA 带有 Triplet x86-windows-static,pkgB 带有 Triplet x86-windows

当我尝试编译我的项目时,pkgA 一切正常,因为$(VcpkgRoot)%userprofile%/vcpkg/installed/x86-windows-static,但是,无法找到 pkgB 的标头,因为它们位于%userprofile%/vcpkg/installed/x86-windows.

我该如何解决这个问题?

vcpkg

6
推荐指数
2
解决办法
1万
查看次数

VS 自动链接 Windows 上随 vcpkg 安装的 SDL2 库

据我所知,这与现有问题并不重复。这个问题专门涉及 Visual Studio 的自动链接 SDL2 库。

我已经使用vcpkgx64-windows安装了 SDL2 (变体):

vcpkg install sdl2 --triplet x64-windows
Run Code Online (Sandbox Code Playgroud)

我已经为 Visual Studio 提供了 vpkg 库:

vcpkg integrate install
Run Code Online (Sandbox Code Playgroud)

我的 VS 2019 项目配置为使用该Console子系统,我的主程序如下所示:

vcpkg install sdl2 --triplet x64-windows
Run Code Online (Sandbox Code Playgroud)

为什么我需要指定SDL_MAIN_HANDLED?似乎由于SDLmain2.lib某种原因没有发生自动链接?

如果我不指定SDL_MAIN_HANDLED,链接将失败:

vcpkg integrate install
Run Code Online (Sandbox Code Playgroud)

我也尝试过添加extern "C"声明main()但无济于事。

我已经用 SDL2 编写了很多应用程序,但这是我第一次使用 vcpkg 来定位它。

c++ sdl visual-studio sdl-2 vcpkg

6
推荐指数
2
解决办法
4170
查看次数

在VC++和vcpkg中设置dll路径

我使用 vcpkg 作为我的 Visual C++ 项目的库管理器。有时我动态链接库并vcpkg在文件夹中提供 dll \vcpkg\installed\x64-windows\bin。当我在DebugRelease模式下运行项目时,出现与缺少 DLL 相关的错误。组织 Visual C++ 从vcpkg文件夹中获取 dll 的优雅方法是什么?

visual-c++ vcpkg

6
推荐指数
0
解决办法
1020
查看次数

标签 统计

vcpkg ×10

c++ ×3

cmake ×2

visual-studio ×2

gmock ×1

linker ×1

linux ×1

mingw ×1

sdl ×1

sdl-2 ×1

static ×1

visual-c++ ×1