链接共享库,调用没有自定义LD_LIBRARY_PATH的程序

时间:2013-01-06 12:54:28

标签: linux shared-libraries awesomium

我可以成功链接到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。一个选项是设置LD_LIBRARY_PATH的shell脚本,但我更喜欢不同的方式(我也听到设置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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

错误是因为。不在你的道路上。您可以选择分发一个bash脚本,该脚本运行带有LD_LIBRARY_PATH集的二进制文件,或者将共享对象复制到/ usr / lib或/ usr / local / lib或者在该特定平台上的任何位置。

除非你想静态链接,否则没有捷径。