我正在为一些用vcpkg下载依赖项的项目安装依赖项(这个项目是Hyperledger,但这并不重要)。不幸的是,在用我的编译器(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构建并包含错误的文件,有什么更专业的(但仍然是快速的)方式?
我发现的一个解决方案是,我可以编辑包:当我编辑包时,我看到了错误:-- Using cached /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的文件。
另一种解决方案是使用cmake运行abseil项目的适当VERBOSE=1,然后在编辑文件和重新运行命令之后复制失败的构建命令。
我知道我的解决方案很脏,所以我想知道是否有更干净的方法来解决问题--当我们使用vcpkg包管理器时,如何编辑库的源代码?
发布于 2022-06-27 21:24:28
我就是这样做的:
使用--editable运行
vcpkg install abseil --editable中初始化git回购
cd buildtrees/abseil/src/_random_string_/
git init .
git add .
git commit -m "init"通过再次调用Installwith
--editable,vcpkg install abseil --editable创建修补程序
git diff > fix_build.patch将补丁复制到端口dir并调整portfile.cmake
vcpkg_from_github(
REPO google/abseil
...
PATCHES fix_build.patch # <-- this is our patch
)https://stackoverflow.com/questions/72588408
复制相似问题