OSX 运行时动态库路径搜索

OSX runtime dynamic library path search

本文关键字:路径搜索 动态 运行时 OSX      更新时间:2023-10-16

在Linux Ubuntu中,我可以使用动态库编译C++源代码,并在编译前通过设置环境变量$LD_RUN_PATH告诉gcc编译器在哪里可以找到.so lib文件。我想知道 OSX 中的 clang 编译器是否有等效的方法可以执行此类运行时动态库路径搜索?

谢谢!

编辑:

下面给出的重复链接不是我想要的!

我想将 dylib 的搜索路径编译到可执行文件中。在运行时,不应为 $DYLD_LIBRARY_PATH 环境路径显式设置任何路径信息。也就是说,当您回显$DYLD_LIBRARY_PATH时,不应看到指向dylib的路径点。

我通过使用

otool -L <executable>

以读取可执行文件中的搜索路径。

对于任何错误或缺少的搜索路径,我使用 install_name_too 来更新或添加搜索路径信息。

对我来说,我正在改变我原来的链接路径。我使用

install_name_tool -change <old_path> <new_path> <executable>

用于链接路径设置。在此之后,我能够正确运行可执行文件链接到dylib,而无需在$LD_LIBRARY_PATH或$LD_FALLBACK_LIBRARY_PATH中设置任何内容。

在带有 LLVM 编译器 "clang" 的 macOS 上,您可以使用 -F{dir} 和 -I{dir} 预处理器选项来搜索框架/库目录和包含目录。这些将编译器在哪里查找要链接的 *.dylib 动态库文件所在的非标准位置。

   -Idirectory
       Add the specified directory to the search path for include files.
   -Fdirectory
       Add the specified directory to the search path for framework include files.

关于搜索行为,这些在 Xcode 中对应于项目或目标"构建设置",称为框架 ~、标头 ~ 和库搜索路径。

您是否希望某些动态库链接到您的应用程序由"常规"设置"链接的框架和库"控制。

有关如何管理动态加载程序 (dyld) 以及使用 @rpath@loader_path宏控制依赖库位置的更多信息,请参见:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html