gpt4 book ai didi

c++ - vcpkg安装包时编译失败如何编辑包文件?

转载 作者:行者123 更新时间:2023-12-05 09:27:19 27 4
gpt4 key购买 nike

我正在为一些使用 vcpkg 下载依赖项的项目安装依赖项(该项目是 Hyperledger Iroha,但这并不重要)。不幸的是,当使用我的编译器 (g++ 12.1.0) 编译依赖项时,其中一个包 (abseil) 没有编译。

它不编译的原因很容易在代码中修复 - 只需更改一行。

cmake 指向的行:

CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:146 (message):
Command failed: /usr/bin/cmake --build . --config Debug --target install -- -v -j13
Working Directory: /home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/x64-linux-dbg
See logs for more information:
/home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/install-x64-linux-dbg-out.log

错误是:

/home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/src/ca9688e9f6-e4cda1d679.clean/absl/debugging/failure_signal_handler.cc:139:32: error: no matching function for call to ‘max(long int, int)’
139 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/12.1.0/algorithm:60,

原因很容易解决 - 我只需要更改一行即可解决此问题。不幸的是,当我更改代码行然后重新运行后:

vcpkg install abseil

我的更改在编译前被删除。我找到了应该有帮助的选项:--editable,但它又发生了。

我想问一下,对于使用vcpkg构建并包含错误的文件,有什么更专业(但仍然快速)的更改方法?


我找到的一个解决方案是我可以编辑包:-- 使用缓存的/home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/downloads/abseil-abseil-cpp-997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz 当我编辑包时,我看到错误:

          File path: [ /home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/downloads/abseil-abseil-cpp-997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz ]
Expected hash: [ bdd80a2278eef121e8837791fdebca06e87bfff4adc438c123e0ce11efc42a8bd461edcbbe18c0eee05be2cd6100f9acf8eab3db58ac73322b5852e6ffe7c85b ]
Actual hash: [ cf8bb1676d2fcba8bdd4bc30e2060bc5552a348d6e192561aec2763460120b10dcb86e29efe60d972d4b241783563bc8067381c48209daee4ecc429786ef6bba ]

所以我可以编辑包含哈希的文件:ports/abseil/portfile.cmake


另一种解决方案是使用 VERBOSE=1 运行 abseil 项目的正确 cmake,然后在编辑文件并重新运行命令后复制失败的构建命令。


我知道我的解决方案很脏所以我想知道是否有更简洁的方法来解决问题 - 当我们使用 vcpkg 时如何编辑库的源代码包管理器?

最佳答案

我是这样做的:

  1. 运行安装 --editable
vcpkg install abseil --editable
  1. 在源目录中初始化 git 仓库:
cd buildtrees/abseil/src/_random_string_/
git init .
git add .
git commit -m "init"
  1. 给库打补丁
  2. 再次使用 --editable 调用 install 来验证库构建
vcpkg install abseil --editable
  1. 根据更改(或提交)创建补丁
git diff > fix_build.patch
  1. 将补丁复制到端口目录并调整portfile.cmake
vcpkg_from_github(
REPO google/abseil
...
PATCHES fix_build.patch # <-- this is our patch
)
  1. 将端口目录复制到项目的 overlay-ports 目录中。 - 或 - 更新端口版本,将其提交到您的自定义注册表中。
  2. (可选,但值得赞赏)在上游和 vcpkg 主仓库中创建 PR。

关于c++ - vcpkg安装包时编译失败如何编辑包文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72588408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com