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

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

 -LL. -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 ,再次运行libawesomium-1.6.5.so给我同样的错误,调用它自定义LD_LIBRARY_PATH=./工程,但我想分发prog和我希望用户能够用root权限(安装awesomium到/usr/lib等),而不需要设置LD_LIBRARY_PATH 。 一个选项是设置LD_LIBRARY_PATH的shell脚本,但我更喜欢不同的方式(我也听说设置LD_LIBRARY_PATH是一个坏主意)。

此外,如果不需要创buildlibawesomium-1.6.5.so.0的符号链接,那将是非常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 

在prog中使用-rpath并设置LD_LIBRARY_PATH

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

而且,这个参数接受一个特殊的值$ORIGIN ,表示包含执行的程序的目录。 所以如果你传递-Wl,-rpath='$ORIGIN'给gcc,你将能够保持libawesomium-1.6.5.so在与程序相同的目录中。

错误是因为。 不在你的路上。 就像你说的那样,你的选择是分配一个运行带LD_LIBRARY_PATH集的二进制文件的bash脚本,或者把共享对象复制到/ usr / lib或者/ usr / local / lib或者任何合适的平台上。

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