我可以成功链接到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或者任何合适的平台上。
真的没有捷径,除非你想静态链接。