Linux上使用vcpkg + CMake配置cpprest

这篇具有很好参考价值的文章主要介绍了Linux上使用vcpkg + CMake配置cpprest。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vcpkg的使用在Linux平台与Windows平台没什么差异,就不过多阐述。

有一点需要注意的是,Windows上安装的包默认是x86,而Linux上默认是x64。

vcpkg安装cpprest

cpprest库依赖很多库,比如boost,openssl等,但不用操心,vcpkg会帮我们自带安装。

./vcpkg install cpprestsdk

问题

需要注意的是,安装过程很有可能会失败,除网络原因外,还有一个地方会出错:

CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:134 (message):
    Command failed: /home/vcpkg/downloads/tools/cmake-3.25.1-linux/cmake-3.25.1-linux-x86_64/bin/cmake --build . --config Debug --target install -- -v -j3
    Working Directory: /home/vcpkg/buildtrees/openssl/x64-linux-dbg
    See logs for more information:
      /home/vcpkg/buildtrees/openssl/install-x64-linux-dbg-out.log

Call Stack (most recent call first):
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_build.cmake:74 (vcpkg_execute_build_process)
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_install.cmake:16 (vcpkg_cmake_build)
  ports/openssl/unix/portfile.cmake:21 (vcpkg_cmake_install)
  ports/openssl/portfile.cmake:33 (include)
  scripts/ports.cmake:147 (include)


error: building openssl:x64-linux failed with: BUILD_FAILED
error: Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
Then check for known issues at:
    https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+openssl
You can submit a new issue at:
    https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[openssl]+Build+error
Include '[openssl] Build error' in your bug report title, the following version information in your bug description, and attach any relevant failure logs from above.
    vcpkg-tool version: 2023-01-24-8a88d63f241d391772fbde69af9cab96c3c64c75
    vcpkg-scripts version: 91dd61bd4 2023-01-27 (2 days ago)

通过查看/home/vcpkg/buildtrees/openssl/install-x64-linux-dbg-out.log日志可以发现

[1/3] cd /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean && export PATH=/bin:/opt/rh/devtoolset-8/root/usr/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/bin:/home/Listening/vcpkg/downloads/tools/ninja/1.10.2-linux && export CC=/opt/rh/devtoolset-8/root/usr/bin/cc && export AR=/opt/rh/devtoolset-8/root/usr/bin/ar && export LD=/opt/rh/devtoolset-8/root/usr/bin/ld && export RANLIB=/opt/rh/devtoolset-8/root/usr/bin/ranlib && export MAKE=/bin/make && export MAKEDEPPROG=/opt/rh/devtoolset-8/root/usr/bin/cc && export WINDRES= && /bin/perl Configure no-shared no-module enable-static-engine no-zlib no-ssl2 no-idea no-cast no-seed no-md2 no-tests linux-x86_64 --prefix=/home/Listening/vcpkg/packages/openssl_x64-linux/debug --libdir=/home/Listening/vcpkg/packages/openssl_x64-linux/debug/lib --openssldir=/etc/ssl "-fPIC -g" && /home/Listening/vcpkg/downloads/tools/cmake-3.25.1-linux/cmake-3.25.1-linux-x86_64/bin/cmake -DDIR=/home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean -P /home/Listening/vcpkg/ports/openssl/unix/remove-deps.cmake
FAILED: nssl-3.0.7-96d825e305.clean/Makefile /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean/Makefile 
cd /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean && export PATH=/bin:/opt/rh/devtoolset-8/root/usr/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/bin:/home/Listening/vcpkg/downloads/tools/ninja/1.10.2-linux && export CC=/opt/rh/devtoolset-8/root/usr/bin/cc && export AR=/opt/rh/devtoolset-8/root/usr/bin/ar && export LD=/opt/rh/devtoolset-8/root/usr/bin/ld && export RANLIB=/opt/rh/devtoolset-8/root/usr/bin/ranlib && export MAKE=/bin/make && export MAKEDEPPROG=/opt/rh/devtoolset-8/root/usr/bin/cc && export WINDRES= && /bin/perl Configure no-shared no-module enable-static-engine no-zlib no-ssl2 no-idea no-cast no-seed no-md2 no-tests linux-x86_64 --prefix=/home/Listening/vcpkg/packages/openssl_x64-linux/debug --libdir=/home/Listening/vcpkg/packages/openssl_x64-linux/debug/lib --openssldir=/etc/ssl "-fPIC -g" && /home/Listening/vcpkg/downloads/tools/cmake-3.25.1-linux/cmake-3.25.1-linux-x86_64/bin/cmake -DDIR=/home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean -P /home/Listening/vcpkg/ports/openssl/unix/remove-deps.cmake
Can't locate IPC/Cmd.pm in @INC (@INC contains: /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean/util/perl /opt/rh/devtoolset-8/root//usr/lib64/perl5/vendor_perl /opt/rh/devtoolset-8/root/usr/lib/perl5 /opt/rh/devtoolset-8/root//usr/share/perl5/vendor_perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean/external/perl/Text-Template-1.56/lib) at /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /home/Listening/vcpkg/buildtrees/openssl/x64-linux-dbg/nssl-3.0.7-96d825e305.clean/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at Configure line 23.
BEGIN failed--compilation aborted at Configure line 23.
ninja: build stopped: subcommand failed.

里面有个关键词Can't locate IPC/Cmd.pm说明在编译OpenSSL时,需要的Perl模块 IPC::Cmd 没有安装。

解决

Perl模块 IPC::Cmd 没有安装,需要安装CPAN模块,再安装IPC::Cmd

在Linux或Unix系统中,通常可以使用包管理器安装CPAN模块。比如,在Debian或Ubuntu上,使用以下命令安装CPAN:

sudo apt-get install cpanminus

如果在其他系统上,查找与您的系统相对应的包管理器命令。比如我这里是CentOS 7系统:

sudo yum install perl-CPAN

安装完后,使用以下命令安装所需的模块:

cpanm IPC::Cmd //Debian或Ubuntu

cpan IPC::Cmd // CentOS

CMake使用cpprest

CMake中使用vcpkg安装的包,需要注意几点:

  1. CMakeLists.txt文件中设置vcpkg的root目录,且需要在project()语句之前
  2. cpprest配置文件路径
cmake_minimum_required(VERSION 3.20)

# 设置VCPKG_ROOT所在的位置
set(VCPKG_ROOT "home/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE PATH "")
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})

project(demo)

set(CMAKE_CXX_STANDARD 14)
# 设置cppresst库所在路径
set(cpprest_DIR "/home/vcpkg/installed/x64-linux/share/cpprestsdk")
find_package(cpprestsdk CONFIG REQUIRED)

add_executable(demo main.cpp)

target_link_libraries(demo PRIVATE pthread cpprestsdk::cpprest)

通过CMake + vcpkg有个好处就是不用手写cpprest所依赖的库,不然target_link_libraries还得加上boost、openssl等。

接下来,就可以使用cpprest库了:

//main.cpp
#include <iostream>
#include <string>
#include "cpprest/http_client.h"
#include "cpprest/uri_builder.h"
#include "cpprest/http_msg.h"
#include "pplx/pplxtasks.h"
#include "cpprest/json.h"
#include "cpprest/uri.h"


using namespace web;
using namespace web::http;
using namespace web::http::client;
using namespace web::json;

std::string send_request(const std::string &url, const std::string& arg) {
    web::http::client::http_client client(url);
    // Build request URI and start the request.
    uri_builder builder(arg);

    std::string re{};
    client.request(methods::GET, builder.to_string())
                    // continue when the response is available
            .then([](http_response response) -> pplx::task<web::json::value> {
                // if the status is OK extract the body of the response into a JSON value
                // works only when the content type is application\json
                if(response.status_code() == status_codes::OK) {
                    return response.extract_json();
                }

                // return an empty JSON value
                return pplx::task_from_result(web::json::value());
            })
                    // continue when the JSON value is available
            .then([&re](pplx::task<web::json::value> previousTask) {
                // get the JSON value from the task and display content from it
                try {
//                    web::json::value const& v = previousTask.get();
                    re = previousTask.get().serialize();
                } catch (http_exception const & e) {
                    printf("Error exception:%s\n", e.what());
                }
            })
            .wait();
    return re;
}

int main()
{
    std::string url{"http://10.2.3.4:2345"};
    std::string arg{"api/storage/service-alarm-info/"};
    auto result = send_request(url,arg);
    std::cout<<result<<"\n";

    while (1)
    {
        /* code */
    }
    
    return 0;
}

注意,由于是事后记录当时为了使用vcpkg + cmake+ cpprest方案所踩的坑,故有不完整的地方或遗漏,还请谅解!文章来源地址https://www.toymoban.com/news/detail-458760.html

到了这里,关于Linux上使用vcpkg + CMake配置cpprest的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux系统下安装Vcpkg,并使用Vcpkg安装、编译OpenSceneGraph

    环境:CentOS7 内存:8g(内存过少编译osg时会出现内存不足导致编译失败的情况,内存设置为4G时失败了,我直接加到了8g,所以就以8g为准了) 安装和配置vcpkg 升级git 安装osg 安装编译osg时需要的依赖 安装osg 测试是否安装成功

    2024年01月19日
    浏览(42)
  • Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

      今天看 OpenCV 方面的教程,pdf 格式的,因为一些强迫症的习惯,喜欢添加一些书签,手动是不太愿意的,自然就想到利用OCR来实现。   想要自己编码实现OCR,方案比较简单就是 Tesseract 。单独使用 Tesseract 也可以,但最好利用 OpenCV 来进行图像方面的处理,一大堆方法可

    2024年02月05日
    浏览(50)
  • VS2022远程Linux使用cmake开发c++工程配置方法

    最近使用别人在VS2015上使用visualgdb搭建的linux开发环境,各种不顺手,一会代码不能调转了,一会行号没了,调试的时候断不到正确的位置,取消的断点仍然会进。因此重新摸索了一套使用vs的远程开发方法。 使用的相关工具及技术涉及: Vs2022 Ninja g++ gcc mobaxterm等。 采用ss

    2024年02月12日
    浏览(45)
  • gRPC结合vcpkg在x64-windows平台visual studio2019 cmake工程里面的应用

    这里我们运用vcpkg去下载安装gRPC,进入vcpkg目录后,执行命令:.vcpkg.exe install grpc:x64-windows grpc在vcpkg里面安装完成后,我们就来使用grpc做一个简单的例子。 gRPC顾名思义,就是google的RPC方案,基于protobuf数据传输,其中proto文件的定义约定了服务器端和客户端的服务接口协议。

    2024年02月02日
    浏览(73)
  • 【配置环境】Windows下C/C++第三方库管理工具vcpkg安装和使用

    目录 一,环境准备 二,vcpkg简介 三,Window系统下载vcpkg 四,Linux系统下载vcpkg 五,vcpkg命令介绍 1.命令参照表 2.常用的vcpkg命令以及详细解释 Git - Downloads 根据平台下载最新版本(傻瓜式安装) Visual Studio 2015 或更新的版本( 包含英文语言包 ),点击VS界面菜单栏的 工具-获

    2024年02月16日
    浏览(43)
  • Windows10通过vcpkg快速配置PCL库

    https://github.com/microsoft/vcpkg **注意:**最好在D盘下克隆源码并安装,这样之后用vcpkg安装的包路径就会在D:/vcpkg/packages/中了 Error: in triplet x86-windows: Unable to find a valid Visual Studio instance The following VS instances were excluded because the English language pack is unavailable: D:Microsoft Visual Studio2019

    2024年02月04日
    浏览(33)
  • 使用cmake配置aws-cpp-sdk以及在cmake项目中使用

    clion msvc 15(2017) cmake 这里不多赘述 注意命令里一定要加–recurse-submodules参数,否则编译的时候会提示项目找不到子项目 先设置build directory为build,然后设置cmake options BUILD_ONLY:设置要编译的模块,多个模块之间用\\\";\\\"分隔 CMAKE_INSTALL_PREFIX:cmake的下载路径,完成安装之后使用f

    2024年02月02日
    浏览(43)
  • Mac 下 CMake 的配置与使用

    进入 官网下载 dmg 文件: (在红圈中根据自己的Mac版本任选一个 dmg 下载) 安装完成后,从菜单栏选择:Tools–How to Install For Command Line Use 在终端命令行中输入弹出弹窗中第二项 to install symlinks to \\\'/usr/local/bin\\\', run: 的指令: 检查是否配置成功: cmake --version 可以正常识别,配

    2023年04月08日
    浏览(25)
  • 使用CMake交叉编译Arm Linux程序

    注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake 工程里新建一个文件叫arm_linux_setup.cmake arm_linux_setup.cmake内容如下

    2024年02月03日
    浏览(53)
  • Vcpkg 的安装与使用

    欢迎大家来我的博客逛逛👏:hauhau.cn 先确保你已经安装了: Windows7 及以上的版本 Git Visual Studio 2015 Update 3 及以上的版本 关于美化 Windows Terminal 及 Powershell,可以查看这篇优秀文章: Windows-Terminal 美化以及通过 OhMyPosh 美化 PowerShell vcpkg 需要 Visual Studio 安装了英文语言包,安装步

    2024年02月05日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包