Linux 链接到共享库,调用没有自定义LD_库路径的程序
我可以成功链接到libawesomium-1.6.5。因此:Linux 链接到共享库,调用没有自定义LD_库路径的程序,linux,shared-libraries,awesomium,Linux,Shared Libraries,Awesomium,我可以成功链接到libawesomium-1.6.5。因此: -L-L. -L-lawesomium-1.6.5 -L-ldl libawesomium-1.6.5。因此与我的可执行文件位于同一目录中,现在如果我尝试调用我的程序(我现在称之为prog),它存在于: ./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file
-L-L.
-L-lawesomium-1.6.5
-L-ldl
libawesomium-1.6.5。因此
与我的可执行文件位于同一目录中,现在如果我尝试调用我的程序(我现在称之为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_库\ u路径=。/
调用它,但我想分发prog
,我希望用户能够在没有根权限的情况下使用prog
(将一个somium安装到/usr/lib
等)并且不需要设置LD\u LIBRARY\u路径
。一个选项是一个shell脚本,它可以设置LD\u LIBRARY\u路径
,但我更喜欢另一种方式(我还听说设置LD\u LIBRARY\u路径
是个坏主意)
此外,如果不需要创建到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 works内部设置LD_LIBRARY_PATH错误在于。不在您的路径中。您可以选择分发一个bash脚本,该脚本运行设置了LD_LIBRARY_PATH的二进制文件,或者将共享对象复制到/usr/lib或/usr/local/lib,或者在该特定平台上的任何合适位置
除非您希望静态链接,否则实际上没有快捷方式。如果您使用gcc,您可以传递-Wl,-rpath=lib_目录
,以便使可执行文件在目录lib_目录
中搜索库
此外,此参数接受一个特殊值$ORIGIN
,该值表示包含已执行程序的目录。因此,如果您将-Wl,-rpath='$ORIGIN'
传递给gcc,您将能够将libawesomium-1.6.5保留在与程序相同的目录中。是的,我想避免这两种情况。感谢您制作了clear表示没有其他方法。静态链接不起作用,因为没有用于awesomium的静态库(仅限封闭源代码。提供了so)我明白了!在我的程序中加载一个somium之前,我可以设置LD\u LIBRARY\u PATH
。你应该传递-Wl,-rpath='$ORIGIN'
,而不是-Wl,-rpath=。
和LI\u LIBRARY\u路径将是无用的。传递-rpath='$ORIGIN'
并不能解决问题:一个somiumprocess
是一个不同的可执行shipp我想它是用来创建渲染线程的。所以我仍然需要设置LD\u LIBRARY\u PATH
,但这没什么大不了的。