微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

共享库path作为可执行目录

为了重用代码我有一个应用程序被分成几个库。 在Windows上,我所要做的就是将.dll文件放在与可执行文件相同的path中,并自动find它们。 在Linux上(因为它硬编码的path),我必须指定环境variablesLD_LIBRARY_PATH或在可执行文件之前预先加载库。

我已经看到了一些使用-Wl,-rpath=<PATH>链接器选项embeddedpath的东西,我试过了. 作为path。 但是,这只是在当前的工作目录,而不是可执行文件的目录。

有没有一种方法可以在链接器中认查找共享库的可执行文件的目录(如在Windows上)?

谢谢! 马特

在运行时replacedynamic共享库

在交叉编译的.so文件中是否有检查符号的工具?

什么是关于Linux上的共享库的良好做法?

我应该如何与Win32 C ++应用程序集成并打包第三方库?

在Windows中编译.so

GCC选项的共享和-WI共享区别

如何用dlopen()replaceLD_PRELOAD的用法

在Linux中共享可执行的内存页面

.so和.a文件有什么区别?

如何从Ocaml使用自己的共享库.so调用C ++代码

你需要在你的RPATH $ ORIGIN,通过适当的选项,以达尔或其他达尔文工具。 看到这个和这个 。

请记住,$必须真正在路径中结束,因此您需要在链接命令行中引用或转义它。

更新:你可以看到什么链接器实际放入你的可执行文件

readelf -d /path/to/exe | grep RPATH

这是输出应该是这样的:

0x0000000f (RPATH) Library rpath: [$ORIGIN]

将程序包装在shell脚本中:

#!/bin/sh PROGRAM_DIRECTORY="`dirname "$0"`" export LD_LIBRARY_PATH="$PROGRAM_DIRECTORY" "$PROGRAM_DIRECTORY/program_executable" "$@"

如果你运行这个脚本(而不是你的可执行文件),你的程序将会很好地链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐