我可以成功链接到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/

10-13 07:47