Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 链接到共享库,调用没有自定义LD_库路径的程序_Linux_Shared Libraries_Awesomium - Fatal编程技术网

Linux 链接到共享库,调用没有自定义LD_库路径的程序

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

我可以成功链接到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 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
,但这没什么大不了的。