当我在编译沙箱c程序后尝试运行.out文件时,它会出现以下错误:
./sandbox: error while loading shared libraries: libsandbox.so: cannot open shared object file: No such file or directory
我该怎么办?
答案 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)
您执行以下操作:
libsandbox.so
的副本。如果你成功地与它相关联,它可能就在某个地方。env LD_LIBRARY_PATH=/directory/of/your/libsandbox/copy/ ./sandbox
并查看它是否有效。gcc -Wl,-rpath='$ORIGIN'
用于链接会使libsandbox.so
从可执行文件的目录中加载。另一个解决方案是处理LD_LIBRARY_PATH
的包装脚本。将libsandbox.so
放入动态链接器可以找到它的位置是另一个。