我可以成功地链接到 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
并且希望用户能够在无需root权限和不设置 LD_LIBRARY_PATH
的情况下使用它(将 awesomium 安装到 /usr/lib
等位置)。一种选择是编写脚本来设置 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并从程序内部设置LD_LIBRARY_PATH是有效的。
LD_LIBRARY_PATH
。 - dav1d-Wl,-rpath='$ORIGIN'
而不是-Wl,-rpath=.
,这样 LI_LIBRARY_PATH 将无用。 - Julien-rpath ='$ ORIGIN'
不能解决问题:AwesomiumProcess
是与awesomium一起提供的不同可执行文件。我认为它用于创建渲染线程。因此,我仍然需要设置LD_LIBRARY_PATH
,但这并不是什么大问题。 - dav1d