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