gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:17:04 26 4
gpt4 key购买 nike

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

所以我创建了一个符号链接(symbolic link) 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 的符号链接(symbolic link),那就太好了。

编辑:

-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 有效

最佳答案

如果您使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com