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

3

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

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

我该怎么办?

2个回答

5
"共享库丢失"问题并不是仅限于libsandbox。事实上,许多使用GNU autotools进行构建配置的自编译库都会遇到这个问题。
问题在于,GNU autotools默认将库准备好放置到/usr/local/lib中(保持此设置默认值有很好的理由,如符合FHS标准)。然而,在某些Linux发行版中(如UbuntuArchLinux),运行时链接器(又名ld.so)不会搜索/usr/local/lib以查找共享库,除非通过ldconfig指定。
虽然@anton-kovalenko的答案中所有其他解决方案都可行,但如果您具有对/usr/lib的写入权限,只需使用选项--prefix=/usr--libdir=/usr/lib配置libsandbox可能更方便。或者,您可以在/etc/ld.so.conf.d中添加一个新的ldconfig条目,以启用系统级别的/usr/local/lib库搜索。
免责声明:我是libsandbox的作者。

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放入动态链接器可以找到的位置是另一个解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接