首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在安装软件包时编译失败时如何编辑包文件?

在安装软件包时编译失败时如何编辑包文件?
EN

Stack Overflow用户
提问于 2022-06-11 22:57:39
回答 1查看 294关注 0票数 1

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

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

这条线是由cmake指定的

代码语言:javascript
复制
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

错误是:

代码语言:javascript
复制
/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,

原因很容易修复--我只需要修改一行就可以解决这个问题。不幸的是,当我更改代码行时,然后在重新运行之后:

代码语言:javascript
复制
vcpkg install abseil

在编译之前,将删除我的更改。我找到了一个应该有用的选项:--editable,但是它又发生了。

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

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

代码语言:javascript
复制
          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的文件。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 21:24:28

我就是这样做的:

使用--editable运行

  1. 安装

代码语言:javascript
复制
vcpkg install abseil --editable

  1. 在源dir:

中初始化git回购

代码语言:javascript
复制
cd buildtrees/abseil/src/_random_string_/
git init .
git add .
git commit -m "init"

通过再次调用Installwith

  1. 来修补库构建的--editable

代码语言:javascript
复制
vcpkg install abseil --editable

  1. 根据更改(或提交)

创建修补程序

代码语言:javascript
复制
git diff > fix_build.patch

将补丁复制到端口dir并调整portfile.cmake

代码语言:javascript
复制
vcpkg_from_github(
    REPO google/abseil
    ...
    PATCHES fix_build.patch # <-- this is our patch
)

  1. 将端口目录复制到项目的覆盖端口dir中。-或-更新端口版本,将其提交到您的自定义registry.
  2. (optional,中,但非常感谢)在上游和vcpkg主要回购中创建PR。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72588408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档