【问题标题】:Is there an equivalent of AddDllDirectory in Linux and Mac?Linux 和 Mac 中是否有等效的 AddDllDirectory?
【发布时间】:2021-06-14 13:38:34
【问题描述】:
我有一个文件夹,其中有许多共享库。我想将它们全部加载到我的程序中,因此迭代它们并加载它们,但有些没有加载,因为它找不到位于同一文件夹中的依赖项但是(至少在 Windows 中)它不会搜索同一个文件夹。
我用谷歌搜索并找到了适用于 Windows 的“AddDllDirectory”。
在 Linux 和 Mac 中是否有此功能的等效项?
如果不是,我该如何解决这个问题?
它需要运行时,因为包含共享库的文件夹可以更改。
【问题讨论】:
标签:
c++
linux
windows
macos
shared-libraries
【解决方案1】:
对于单个特定程序,从 shell(或使用脚本)执行它,如下所示:
LD_LIBRARY_PATH=path:to:libraries /path/to/program
要设置系统范围的库,请调整 /etc/ld.so.conf.d 或 /etc/ld.so.conf 的内容。
如果您只想让您的程序引用特定的附加路径,请查看rpath 链接器标志。例如
gcc -o my_program -Wl,-rpath='additional/library/paths'
使用 rpath 请注意特殊的“变量”${ORIGIN},它允许您指定相对于链接二进制文件的安装位置的路径。有关详细信息,请阅读 ld.so 的手册页