链接共享库,调用没有自定义LD_LIBRARY_PATH的程序

dav*_*v1d 5 linux shared-libraries awesomium

我可以成功链接libawesomium-1.6.5.so:

-L-L.
-L-lawesomium-1.6.5
-L-ldl
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

所以我创建一个libawesomium-1.6.5.so.0指向的符号链接libawesomium-1.6.5.so,prog再次运行给我同样的错误,用自定义LD_LIBRARY_PATH=./工程调用它,但我想分发prog,我希望用户能够使用progroot权限(安装awesomium /usr/lib等)和无需设置LD_LIBRARY_PATH.一个选项是一个shell脚本设置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
Run Code Online (Sandbox Code Playgroud)

使用-rpath并从内部设置LD_LIBRARY_PATH工作

Jul*_*ien 6

如果使用gcc,则可以传递-Wl,-rpath=lib_directory以使可执行文件搜索目录中的库lib_directory.

此外,此参数接受一个特殊值$ORIGIN,该值表示包含已执行程序的目录.因此,如果您传递-Wl,-rpath='$ORIGIN'给gcc,您将能够与程序保持libawesomium-1.6.5.so在同一目录中.