【问题标题】:Installing missing symbol file libstdc++-libc6.1-1.so.2 on Linux Mint 17在 Linux Mint 17 上安装缺少的符号文件 libstdc++-libc6.1-1.so.2
【发布时间】:2018-11-21 18:01:09
【问题描述】:

我正在尝试在 Linux Mint 17 上执行元胞自动机程序,但出现以下错误:

./simu: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory

我安装了 libstdc++,但其中没有包含名称 libstdc++-libc 的文件。

我检查了许多其他解决方案,但似乎没有任何效果。因此,我想知道我应该怎么做才能找到并安装丢失的文件。这是一个学校项目,所以任何帮助将不胜感激。

【问题讨论】:

  • 简要描述已经尝试过的解决方案很有用,这有助于跟踪真正的问题

标签: symbols libc libstdc++


【解决方案1】:

请提供更多详情

您可以使用file 命令获得有关您的二进制文件 (simu) 的有用证明:

file path/to/the/simu

您还可以使用 ldd 仔细检查二进制文件正在查找的库的确切名称:

ldd path/to/the/simu

请提供前面命令的输出,以帮助回答您的问题。

同时,一个可能的答案可能是..

我想二进制文件已经在 RedHat/Fedora/Centos 上使用他们的 compat-lib* 包(提供libstdc++-libc lib)编译。

我认为/假设在 Mint/Ubuntu 中没有相同的 compat-* 包和库,但是使用这样的库编译,也许它应该通过在库路径中手动创建适当的符号链接来工作。符号链接应指向系统中已安装的libstdc++ 动态库之一)

例如,您可以创建一个从/usr/lib/x86_64-linux-gnu/libstdc++-libc6.1-1.so.2/usr/lib/x86_64-linux-gnu/libstdc++.so.? 的链接,在哪里?是您在系统中找到的较小版本号。 命令示例(你必须适应它):

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++-libc6.1-1.so.2

还有一些情况(取决于二进制文件是在 32 位还是 64 位上编译的),您需要将路径 x86_64-linux-gnu 更改为 i386-linux-gnu。你必须尝试适应你的情况。

这是一个假设的粗略破解,不能保证 :-) 事实上我只是好奇。

更干净的方式

为了不让链接污染您的操作系统/系统,您可以创建一个新文件夹,将其命名为“customlibs”,在您拥有程序/二进制文件的同一位置。

您可以在该文件夹内为每个不匹配的库文件名创建链接,例如:

ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./customlibs/libstdc++-libc6.1-1.so.2

然后,为了执行程序,打开一个终端并从 cli 使用以下命令更改 LD_LIBRARY 环境变量:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/absolute/path/to/customlibs

这样,系统也会在customlibs 中查找库。

在同一个终端,执行程序:

./simu

这样你就不会弄乱系统。

你需要非常幸运

从已编译二进制文件的系统中复制所需的库时,以“更简洁的方式”执行该工作相当简单。

也是比较靠谱的方法,我已经执行过几次了。 我们现在正在执行的 hack,与当前系统库链接,有点“难”。祝你好运。

【讨论】:

  • 非常感谢您回复我。从我得到的第一个命令
  • simu:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.0.0,未剥离,第二个我得到了linux-gate.so.1 => (0xf77a7000) libstdc++-libc6.1-1.so.2 => 未找到 libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7717000 ) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7566000) /lib/ld-linux.so.2 (0xf77a8000) 接下来我将尝试链接命令。链接命令是否会对系统的其余部分造成任何问题。
  • 首先,您可以注意到您有一个 32 (386) 位二进制文​​件,因此您需要链接 /lib/i386-linux-gnu 库而不是 x64 库。另请注意,您缺少libstdc++-libc6.1-1.so.2和libm.so.6.so,第二个很奇怪,请检查您是否安装了这个库。通常,当您不覆盖已经存在的文件时,您不会破坏任何东西,但它有点混乱。我将在我的答案中添加一个关于创建链接的更简洁方法的建议。请考虑,当您在文件夹中复制/使用来自旧操作系统的二进制文件时,这些技巧会更好地工作
  • 添加了一个“更清洁的方式”部分,让我们试试.. 但你必须非常幸运。知道这个二进制文件来自的发行版名称可能非常有用,或者,如果您可以访问该系统,那么您是否可以从该系统复制文件。问候
  • 请用最终结果(成功/失败)更新线程,这是最重要的贡献;-)
猜你喜欢
  • 1970-01-01
  • 2016-03-27
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多