OSX运行时动态库路径搜索

时间:2016-04-24 05:55:11

标签: c++ linux macos compilation dynamic-linking

在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 中设置任何内容。

1 个答案:

答案 0 :(得分:0)

在具有LLVM编译器“ clang”的macOS上,您具有-F {dir}和-I {dir}预处理程序选项以搜索Framework / Library目录和Include目录。这些将使编译器在哪里寻找* .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中对应于称为Framework〜,Header〜和Library Search Paths的项目或目标“构建设置”。

是否要一些动态库链接到您的应用程序是由“常规”设置“链接的框架和库”决定的。

有关如何使用 @rpath @loader_path 宏来管理动态加载器(dyld)和控制相关库的位置的更多信息,请参见:{{3} }