如何修复分布式二进制文件中的“符号查找错误”?

Posted

技术标签:

【中文标题】如何修复分布式二进制文件中的“符号查找错误”?【英文标题】:How to fix "symbol lookup error" in a distributed binary? 【发布时间】:2020-07-29 02:47:20 【问题描述】:

我刚刚将 Linux Mint 从 19.3 升级到 20。

我发现存档文件没有打开。更具体地说,file-roller 报告错误:

root@Sala:/home/peter# /usr/bin/file-roller
/usr/bin/file-roller: symbol lookup error: /usr/bin/file-roller: undefined symbol: archive_write_add_filter_zstd

我已使用 synaptic 和 apt --purge 删除并重新安装了 file-roller,但问题仍未解决。

我已在 Linux Mint 论坛发帖,超过 24 小时后未发布解决方案。

我该如何解决这个问题?

【问题讨论】:

好的,进一步调查显示在 libarchive.so.13 中有很多 'archive_write_add_filter*' 符号,但 zstd 不在其中。我有点怀疑我的 libarchive.so.13 日期是 2017 年 9 月 15 日,但我不确定如何找到可能包含 zstd 的更新副本。 好的,我已经解决了这个问题 - 出于某种原因,libarchive.so 的旧副本已与 Python 库一起安装在 /usr/local/lib 中。删除允许 file-roller 运行的文件。 【参考方案1】:

我在 Amazon AMI 上遇到了类似的问题,它的 libarchive 的最新可升级版本设置为 3.1.2-14.amzn2,我想获得 3.5.1 的实际最新版本。我能够在http://www.linuxfromscratch.org/blfs/view/svn/general/libarchive.html 的帮助下解决它:

sudo yum remove libarchive*
wget https://github.com/libarchive/libarchive/releases/download/3.5.1/libarchive-3.5.1.tar.xz
tar -xvf libarchive-3.5.1.tar.xz

cd libarchive-3.5.1
./configure --prefix=/usr --disable-static && make
sudo make install

cd .. && rm -rf libarchive-3.5.1 && rm libarchive-3.5.1.tar.xz

我搞砸了,因为我也在尝试更新 CMake。这继续失败,因为 CMake 正在 /usr/lib64 中寻找 libarchive,但它已安装到 /usr/lib。这感觉不对。如果有更好的方法,请告诉我。

sudo cp /usr/libarchive* /usr/lib64

【讨论】:

以上是关于如何修复分布式二进制文件中的“符号查找错误”?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio - 如何修复二进制项目文件中的路径?

如何修复无法在 macbook 上自动检测 ADB 二进制文件

如何在我的 pygame 项目的 Python 二进制文件中修复此编码错误?

如何修复 ray 不断增长的内存使用量?

使用python psycopg2保存二进制数据时如何修复“无法适应错误”

不停服更新二进制文件