5

我可以成功链接到libawesomium-1.6.5.so

-L-L.
-L-lawesomium-1.6.5
-L-ldl

libawesomium-1.6.5.so与我的可执行文件在同一个目录中,现在如果我尝试调用我的程序(我现在称之为 prog),它存在于:

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory

libawesomium-1.6.5.so.0所以我做了一个指向的符号链接libawesomium-1.6.5.so,再次运行prog给了我同样的错误,用自定义作品调用它LD_LIBRARY_PATH=./,但我想分发prog并且我希望用户能够在prog没有 root 权限的情况下使用(将 awesomium 安装到/usr/lib等)和无需设置LD_LIBRARY_PATH. 一种选择是设置 . 的 shell 脚本LD_LIBRARY_PATH,但我更喜欢另一种方式(我也听说设置LD_LIBRARY_PATH是个坏主意)。

此外,如果不需要创建指向libawesomium-1.6.5.so.0.

编辑:

传递-rpath=.给链接器工作!但不幸的是 awesomium 无法处理它:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory

使用 -rpath 并从 prog 内部设置 LD_LIBRARY_PATH 有效

4

2 回答 2

6

如果您使用 gcc,您可以通过-Wl,-rpath=lib_directory以使可执行文件搜索目录中的库lib_directory

此外,此参数接受一个特殊值,该值$ORIGIN表示包含已执行程序的目录。因此,如果您传递-Wl,-rpath='$ORIGIN'给 gcc,您将能够保存libawesomium-1.6.5.so在与程序相同的目录中。

于 2013-01-06T19:11:06.157 回答
1

错误是因为 . 不在你的路上。正如您所说,您的选择是分发一个 bash 脚本,该脚本运行设置了 LD_LIBRARY_PATH 的二进制文件,或者将共享对象复制到 /usr/lib 或 /usr/local/lib 或该特定平台上合适的任何地方。

真的没有捷径,除非你想静态链接。

于 2013-01-06T12:57:27.663 回答