标签: vcpkg

在 Windows 上设置 CMake 和 vcpkg 时出错“无法打开包含文件”

我一直在尝试遵循vcpkg 设置指南,但无法解决最后一步中出现的构建错误:

fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的vcpkg设置过程如下:

  • > git clone https://github.com/Microsoft/vcpkg.git
  • > cd vcpkg\
  • > .\bootstrap-vcpkg.bat
  • > vcpkg install sqlite3:x64-windows
  • > vcpkg integrate install

我确认 sqlite 安装:

> vcpkg list

sqlite3:x64-windows                 3.29.0-1         SQLite is a software library that implements a s...
Run Code Online (Sandbox Code Playgroud)

我在测试存储库中创建以下文件:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(test)

find_package(Sqlite3 REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main sqlite3)
Run Code Online (Sandbox Code Playgroud)

主要.cpp:

#include <sqlite3.h>
#include <stdio.h>

int main()
{
    printf("%s\n", sqlite3_libversion());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

开始构建:

然后,我通过在构建文件夹中运行以下命令来生成构建文件,并注意它能够找到 …

c++ sqlite cmake vcpkg

4
推荐指数
1
解决办法
3913
查看次数

有没有办法避免错误 C2039:“value”:不是“boost::proto”的成员?

我正在使用它boost::network::uri::encoded()来编码我的请求 URL。
但是当我构建项目时,我看到了错误:

error C2039: "value": Is not a member of "boost::proto"
Run Code Online (Sandbox Code Playgroud)

其中有四个,他们的报道来自:

boost\proto\generate.hpp(239,20);
boost\proto\generate.hpp(239,53);
boost\proto\generate.hpp(248,20);
boost\proto\generate.hpp(248,53)
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

#include <iostream>
#include <string>
#include "boost/network/uri.hpp"
using std::string;
string EncodeURL(string str)
{
    return boost::network::uri::encoded(str);
}
string DecodeURL(string str)
{
    return boost::network::uri::decoded(str);
}
int main()
{
    EncodeURL("https://test.com/a+a+a.html");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我安装boostcpp-netlib使用了vcpkg。我的IDE是Visual Studio Professional 2019,操作系统是Windows 10 Professional Workstation x64(Ver.2004)。
我想知道如何避免这些错误或使用其他方法对 UNICODE 兼容的 URL 进行编码。

c++ boost cpp-netlib vcpkg visual-studio-2019

4
推荐指数
1
解决办法
2614
查看次数

无法在 macOS 上安装与 vcpkg 的用户范围终端集成

我正在尝试按照官方说明获取 Vcpkg 用户范围的 bash 集成。这是我采取的步骤:

  1. git clone https://github.com/Microsoft/vcpkg.git
  2. cd vcpkg
  3. ./bootstrap-vcpkg.sh
  4. ./vcpkg integrate install

为此 vcpkg 根应用了用户范围的集成。

CMake 项目应使用:“-DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake”

  1. ./vcpkg integrate bash

无法读取/Users/<用户>/.bashrc

  1. touch /Users/<user>/.bashrc并重复步骤5

将 vcpkg 完成条目添加到 /Users/<user>/.bashrc

  1. mv /Users/<user>/.bashrc /Users/<user>/.bash_profile

但是,现在当我运行vcpkg./vcpkg在新终端中时,我得到:

-bash:vcpkg:找不到命令

如果您能帮助我了解问题所在以及如何解决它,我将不胜感激。

我的环境是:

  • macOS Catalina 版本 10.15.4
  • GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin19)

PS在这里被要求展示的内容.bash_profile是:

source /path/to/vcpkg/scripts/vcpkg_completion.bash
Run Code Online (Sandbox Code Playgroud)

macos bash vcpkg

4
推荐指数
1
解决办法
5512
查看次数

无法在 Windows 中链接 grpc 库

我已经在 Windows 中使用 vcpkg 安装了 grpc:x64,并且正在尝试编译基本的欢迎服务器程序。但它给了我链接错误。尽管 find_package 命令能够找到 grpc 包,但我怀疑库路径设置不正确。我无法找出这个问题的确切原因。如果 find_package 成功,我是否必须显式提供库路径?

操作系统:Windows 10
工具链:Visual Studio 15

cmake_minimum_required(版本3.1)

项目(测试)

find_package(需要 gRPC 配置)

find_package(需要 Protobuf )

add_executable( ${PROJECT_NAME} src/main.cpp 原型/hello_world.grpc.pb.cc 原型/hello_world.pb.cc)

target_link_libraries( ${PROJECT_NAME} PRIVATE gRPC::grpc++ gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc_cronet protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite )

我在基本问候服务器程序时收到以下错误

    1>------ 构建开始:项目:测试,配置:发布 x64 ------
1>main.obj : 错误 LNK2019: 函数“void __cdecl RunServer(void)”(?运行服务器@@YAXXZ) 1>C:\all_files\junkyard\_grpc\build\Release\test.exe:致命错误 LNK1120:1 个无法解析的外部 2>------ 跳过构建:项目:ALL_BUILD,配置:Release x64 ------ 2>未选择为此解决方案配置构建项目 ========== 构建:0 成功,1 失败,1 最新,1 跳过 ==========

任何识别问题的指示都将不胜感激。谢谢。

c++ windows cmake grpc vcpkg

4
推荐指数
1
解决办法
2408
查看次数

无法使用 CMake 和 vcpkg 找到 Boost 库

我已经boost-variant2使用 vcpkg 命令安装了库:

vcpkg 安装 boost-variant2:x64-windows

vcpkg安装完成后,提示如下:

The package boost is compatible with built-in CMake targets:

    find_package(Boost REQUIRED [COMPONENTS <libs>...])
    target_link_libraries(main PRIVATE Boost::boost Boost::<lib1> Boost::<lib2> ...)
Run Code Online (Sandbox Code Playgroud)

所以在我的 CMakeLists.txt 中我添加了以下几行:

find_package(Boost COMPONENTS variant2 REQUIRED)
target_link_libraries(MyTarget PRIVATE Boost::variant2)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,cmake -DCMAKE_TOOLCHAIN_FILE:STRING=/path_to_vcpkg/scripts/buildsystems/vcpkg.cmake出现以下错误:

-- 配置不完整,出现错误!
找不到 Boost(缺少:variant2)(找到版本“1.78.0”)

c++ boost cmake vcpkg

4
推荐指数
1
解决办法
3236
查看次数

vcpkg 中的“内置基线”用于安装 Franka Matlab?

我想根据 LibFranka 安装 Matlab 扩展

安装 Visual Studio 后,他们说我应该安装 vcpkg,将其添加到 PATH 并运行

vcpkg 安装 eigen3:x64-windows

但是,错误消息

错误:此 vcpkg 实例需要具有指定基线的清单才能与端口交互。请将“builtin-baseline”添加到清单中,或添加重新定义默认注册表的“vcpkg-configuration.json”。

已产生。我查看了 vcpkg 的文档,但我不知道在哪个 json 文件中放入什么内容。

我尝试添加 vcpkg-configuration.json 但该文件被忽略。我在论坛上读到, vcpkg.json 必须存在,但我不知道要填写什么,否则它会显示“vcpkg.json 中出现意外的 EOF”。

我读到 vcpkgbuiltin-baseline 是指定版本的,但我不知道要放入什么。请帮忙。

vcpkg

4
推荐指数
2
解决办法
5039
查看次数

Intel TBB - 'InitializeCriticalSectionEx':未找到标识符编译器错误

我有一个依赖OpenCV和TBB的VS(C++)项目,所以我为每个库创建了属性表并将它们包含在项目中.一切正常,代码编译.

昨天,我已经开始使用vcpkg包管理器了.我通过vcpkg安装了OpenCV和TBB,一切似乎都有效.我创建了一个空项目,包括两者的标题,并测试新编译的库是否有效.在验证之后,我回到了我的主项目并删除了属性表,所以我可以使用vcpkg中的库.自上次成功编译以来,我没有以任何方式更改代码.

但是当我现在尝试编译代码时,我得到了两次这个错误(在main.cpp和子模块中)

tbb\critical_section.h(53):错误C3861:'InitializeCriticalSectionEx':未找到标识符

有谁知道这里发生了什么或为什么会发生这个错误?

更新

我自己发现了这个错误.我正在添加poco-libraries标签,因为它实际上是TBB和Poco之间的冲突.

c++ tbb poco-libraries c++17 vcpkg

3
推荐指数
1
解决办法
195
查看次数

在树莓派上运行 vcpkg 时出现 VCPKG_FORCE_SYSTEM_BINARIES 错误

我安装了最新版本的 cmake,并按照我所做的一些说明将使用 vcpkg 与 grpc 的项目集成。安装 vcpkg 后,我尝试安装软件包,./vcpkg install grpc结果出现以下错误。这些说明适用于 OSX 和 Ubuntu,但我在使用树莓派时遇到了问题。

我已经尝试了这两个0选项1$VCPKG_FORCE_SYSTEM_BINARIES=1但两个选项都不起作用。使用./vcpkg导致 VCPKG_FORCE_SYSTEM_BINARIES 错误的结果:

pi@raspberrypi:~/vcpkg $ ./vcpkg 
Environment variable VCPKG_FORCE_SYSTEM_BINARIES must be set on arm and s390x platforms.
pi@raspberrypi:~/vcpkg $ VCPKG_FORCE_SYSTEM_BINARIES=1
pi@raspberrypi:~/vcpkg $ echo $VCPKG_FORCE_SYSTEM_BINARIES
1
pi@raspberrypi:~/vcpkg $ ./vcpkg 
Environment variable VCPKG_FORCE_SYSTEM_BINARIES must be set on arm and s390x platforms.
Run Code Online (Sandbox Code Playgroud)

raspberry-pi vcpkg

3
推荐指数
1
解决办法
5906
查看次数

查找没有“find_package”文档的 vcpkg 包

当您通过 vcpkg 安装许多软件包(例如vcpkg install cairo)时,在此过程结束时,系统会告诉您要使用哪些命令find_packagetarget_link_librariesCMake 命令来链接到已安装的软件包。这很好用;您甚至可以重新执行安装命令以再次查看这些 CMake 命令。

但是,通过 vcpkg 安装的某些软件包没有这些。例如,安装 Pango 后,没有实际使用该库的 CMake 命令列表。我在几个 vcpkg 包目录中找到了目标 CMake 文件find_package,但 Pango 目录没有该包的 CMake 文件。

由于某种原因,使用 Pango 的示例代码仍然可以编译(即:它可以找到 Pango 的标头),但由于未链接到正确的库而无法链接。

那么这应该如何运作呢?我是否必须通过 Pango 的各种 CMake 接口列出包含目录、库目录和库文件?或者是否有一些替代的包含机制可以像大多数其他 vcpkg 软件包一样处理细节?

请注意,我正在使用 Visual Studio 2019 的内置 CMake 功能来尝试使用这些功能进行构建。

cmake visual-studio vcpkg

3
推荐指数
1
解决办法
2657
查看次数

vcpkg 是发布开源和跨平台 C++ 库的宝贵选择吗

我是Linux用户,只在Linux上开发。我知道如何使用 Make 和 CMake 来构建我的库,但随着我的进步和扩大项目的难度,我现在必须以最少的用户输入解决跨平台兼容性问题。

为了实现我的目标,vcpkg 是一个不错的选择吗?如果不是,那么在开发 Windows 应用程序时选择使用包管理器是否合理?

我的目标是,我的库的 Windows 用户在下载和安装后可以轻松地使用它们,即通过包含相关标头,并且理想情况下,如果使用 Eclipse 或 MSVC,则不必担心针对静态进行编译和链接。

请记住,我不是一名专业的软件开发人员,而是一名计算科学家,他试图不搞乱他工作中的软件工程部分,同时努力让最终用户(其他计算机科学研究员)的生活成为可能尽可能简单。

我正在寻找的是一个关于当今跨多个操作系统构建、运输和使用库的事实上的标准的观点。

c++ windows cross-platform compilation vcpkg

3
推荐指数
1
解决办法
1370
查看次数