Linux:可执行文件无法找到共享库。

7

我已经编译了 casablanca 并且在我的 CMakeList.txt 文件中加入了 -l:/~/path/to/lib/libcasablanca.so。我已经构建了我的应用程序并且没有出现错误。但是当我运行可执行文件时,它会显示:

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

我已经在另一台电脑上完成了这项任务,似乎运行良好。

有人知道问题是什么吗?如何解决?

我没有对这台机器的管理员权限。

1个回答

9
这很简单:你的库不在系统默认路径中,从中导入共享库。在编译过程中,编译脚本解决了这些问题。运行时,你需要使用 LD_PRELOADLD_LIBRARY_PATH 环境变量。
例如: export LD_LIBRARY_PATH=/home/darkside/wunderprog/lib 将扩展搜索您的库文件所在的目录。如果你有 libcasablanca.so,那么你就能得到你想要的结果。
通常,我会在我的用户账户中使用一个 /home/<myusername>/lib 目录,并从 .profile 中设置 LD_LIBRARY_PATH

如果我执行 export LD_LIBRARY_PATH=/~/path/to/lib,它会删除变量中存在的值吗?还是什么都没有? - thedarkside ofthemoon
1
@thedarksideofthemoon 是的,但通常它是空的(系统共享库搜索路径不在那里)。如果您有一些重要的内容,可以给他一个用冒号分隔的路径列表,就像我们在 $PATH 中看到的那样:export LD_LIBRARY_PATH=/home/darkmoon/lib:/home/darkmoon/some_another/lib ...或者就这样。 - peterh

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