gpt4 book ai didi

c++ - zlib 部署破坏了 Ubuntu

转载 作者:行者123 更新时间:2023-12-04 19:25:01 25 4
gpt4 key购买 nike

我正在尝试使用 zlib 作为对 C++ 项目的依赖项。例如,我正在尝试构建 zlib 1.2.8在 Ubuntu 20.04 LTS 上使用 make。我正在使用以下命令行:

./configure --enable-shared
make
make install
/sbin/ldconfig
主要问题是,在这个过程之后,基本上,ubuntu 上的一切都停止工作了。例如,我无法打开记事本。重新启动后,我卡在“预启动”屏幕上:
dev/sda5: clean, ****/**** files, ****/**** blocks
我正在使用云机器并且在命令行访问中我可以看到以下错误。这里是日志的一部分(错误重复多行):
Apr 22 14:20:49 test-ubuntu: /usr/lib/gdm3/gdm-wayland-session[1082]: /usr/libexec/gnome-session-binary: /usr/local/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /lib/x86_64-linux-gnu/lib
png16.so.16)
...
Apr 22 14:20:49 test-ubuntu: /usr/libexec/goa-deamon: /usr/local/lib/libz.so.1: version 'ZLIB_1.2.9' not found (required by /lib/x86_64-linux-gnu/libpng16.so.16)
...
作为一个云环境,我不能只是“粘一个 USB”来修复 Ubuntu 安装。我也尝试使用 Ubuntu 18.04,但都使用 zlib 1.2.11作为默认版本。我使用以下代码段来获取此信息:
$ python
>>> import zlib
>>> zlib.ZLIB_VERSION
'1.2.11'
我需要使用 zlib 1.2.8 和 Ubuntu 系统。我怎样才能将它们放在一起而不会发生任何“爆炸”?

最佳答案

您几乎不应该将自定义构建库安装到系统范围的路径中。你的操作系统有一个包管理器是有原因的。它将不同系统组件的所有正确版本和构建配置保存在一起。如果您弄乱了任何东西,请不要指望您的系统可以继续工作。
C++ 项目的依赖项应安装到单独的本地目录中。您可以使用某种依赖管理器(如 conan)自动执行此操作。或使用以下配置选项手动执行:

./configure --prefix=<my_local_install_path> --enable-shared
make
make install
<my_local_install_path>可以是系统链接器未使用的任何路径。如果您不需要 make install 的 root 权限,你应该没事。
您当然需要告诉您的项目在哪里可以找到 zlib 的自定义编译版本。如何做到这一点的确切方法取决于您使用的构建系统。在 cmake 你设置 CMAKE_PREFIX_PATH=<my_local_install_path>在命令行上。如果使用简单的编译器命令,您需要通过 -L<my_local_install_path> 指定链接器的路径。 .请注意,在第二种情况下(如果使用共享 zlib),您还需要在运行时告诉程序在哪里可以找到库(例如,通过在运行程序之前设置 LD_LIBRARY_PATH 变量)。
编辑
我刚刚注意到,您打算安装旧版本的 zlib,而不是系统默认版本。有没有原因。我不认为 zlib 是那种改变 api 的库类型,以至于不可能坚持更新版本。您是否尝试过使用系统默认版本?很可能您只需要一个小修复,就可以使用新的(系统默认)版本。

关于c++ - zlib 部署破坏了 Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72012803/

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