加载共享库时出错:libsandbox.so

时间:2013-01-28 11:18:07

标签: gcc shared-libraries sandbox autoconf

当我在编译沙箱c程序后尝试运行.out文件时,它会出现以下错误:

    ./sandbox: error while loading shared libraries: libsandbox.so: cannot open shared object file: No such file or directory

我该怎么办?

2 个答案:

答案 0 :(得分:5)

共享库丢失”问题不是libsandbox唯一的。许多使用GNU自动工具进行构建配置的自编译库都会发生这种情况。

问题是GNU autotools默认准备库转到/usr/local/lib(并且有充分理由将此设置保持为默认值,例如FHS一致性)。但是,在某些Linux发行版中 - 例如 Ubuntu ArchLinux - 运行时链接程序(又名。ld.so)执行而不是搜索/usr/local/lib用于共享库,除非通过ldconfig指定。

虽然来自@ anton-kovalenko的答案的所有其他解决方案都是可行的,但如果您只使用选项libsandbox--prefix=/usr配置--libdir=/usr/lib可能会更方便(如果您具有写访问权限)当然是/usr/lib。或者,您可以在ldconfig中添加新的/etc/ld.so.conf.d条目,以便在系统级启用/usr/local/lib库搜索。

免责声明:我是libsandbox的作者。

答案 1 :(得分:1)

您执行以下操作:

  1. 首先,您找到libsandbox.so的副本。如果你成功地与它相关联,它可能就在某个地方。
  2. 然后您尝试env LD_LIBRARY_PATH=/directory/of/your/libsandbox/copy/ ./sandbox并查看它是否有效。
  3. 然后,您决定如何将程序与库一起部署,以便它可以在目标计算机上运行。有许多可能性:gcc -Wl,-rpath='$ORIGIN'用于链接会使libsandbox.so从可执行文件的目录中加载。另一个解决方案是处理LD_LIBRARY_PATH的包装脚本。将libsandbox.so放入动态链接器可以找到它的位置是另一个。