我可以成功链接到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
并且我希望用户能够使用prog
没有root权限(将awesomium安装到/usr/lib
等),而无需设置LD_LIBRARY_PATH
。一个选项是设置LD_LIBRARY_PATH
的shell脚本,但我更喜欢不同的方式(我也听到设置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并在prog内部设置LD_LIBRARY_PATH
答案 0 :(得分:6)
如果您使用gcc,则可以传递-Wl,-rpath=lib_directory
以使可执行文件搜索目录lib_directory
中的库。
此外,此参数接受一个特殊值$ORIGIN
,表示包含已执行程序的目录。因此,如果您将-Wl,-rpath='$ORIGIN'
传递给gcc,您将能够将libawesomium-1.6.5.so
保留在与程序相同的目录中。
答案 1 :(得分:1)
错误是因为。不在你的道路上。您可以选择分发一个bash脚本,该脚本运行带有LD_LIBRARY_PATH集的二进制文件,或者将共享对象复制到/ usr / lib或/ usr / local / lib或者在该特定平台上的任何位置。
除非你想静态链接,否则没有捷径。