gpt4 book ai didi

c++ - OSX 运行时动态库路径搜索

转载 作者:行者123 更新时间:2023-12-03 09:53:10 26 4
gpt4 key购买 nike

在 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} 预处理器选项来搜索 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 的项目或目标“build设置”。
您是否希望某个动态库链接到您的应用程序由“常规”设置“链接的框架和库”控制。
更多关于如何管理动态加载器 (dyld) 和控制依赖库的位置,请使用 @rpath @loader_path 宏记录在: https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html

关于c++ - OSX 运行时动态库路径搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com