我可以成功链接到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
的符号链接(symbolic link)libawesomium-1.6.5.so
,再次运行prog
也会给我同样的错误,并使用自定义的LD_LIBRARY_PATH=./
调用它,但是我想分发prog
,我希望用户能够在没有root权限的情况下使用prog
(安装awesomium到/usr/lib
等),而无需设置LD_LIBRARY_PATH
。一种选择是设置LD_LIBRARY_PATH
的shell脚本,但我更喜欢另一种方式(我也听说设置LD_LIBRARY_PATH
是一个坏主意)。此外,如果不需要创建指向
libawesomium-1.6.5.so.0
的符号链接(symbolic link),那就太好了。编辑:
将
-rpath=.
传递给链接器有效!但是不幸的是,asosomium无法处理它:/.../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可工作
最佳答案
如果使用gcc,则可以传递-Wl,-rpath=lib_directory
以便使可执行文件搜索lib_directory
目录中的库。
此外,此参数接受特殊值$ORIGIN
,该值表示包含已执行程序的目录。因此,如果将-Wl,-rpath='$ORIGIN'
传递给gcc,则可以将libawesomium-1.6.5.so
保留在与程序相同的目录中。
关于linux - 链接到共享库,调用没有自定义LD_LIBRARY_PATH的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14182336/