yc2*_*986 6 c++ linux macos compilation dynamic-linking
在Linux Ubuntu中,我可以使用动态库编译C++源代码,并通过在编译前设置环境变量$LD_RUN_PATH来告诉gcc编译器在哪里找到.so lib文件。我想知道 OSX 中的 clang 编译器是否有等效的方法来执行此类运行时动态库路径搜索?
非常感谢!
编辑:
下面给出的重复链接不是我想要的!
我想将 dylib 的搜索路径编译到可执行文件中。在运行时,不应为$DYLD_LIBRARY_PATH环境路径显式设置任何路径信息。也就是说,当您 echo $DYLD_LIBRARY_PATH时,不应看到指向 dylib 的路径。
我通过使用实现了这一点
otool -L <executable>
Run Code Online (Sandbox Code Playgroud)
读取我的可执行文件中的搜索路径。
对于任何错误或缺少搜索路径的情况,我使用 install_name_too 来更新或添加搜索路径信息。
对我来说,我正在改变我原来的链接路径。我用
install_name_tool -change <old_path> <new_path> <executable>
Run Code Online (Sandbox Code Playgroud)
用于链接路径设置。之后,我可以正确运行链接到 dylib 的可执行文件,而无需在$LD_LIBRARY_PATH或$LD_FALLBACK_LIBRARY_PATH中设置任何内容。
在使用 LLVM 编译器“clang”的 macOS 上,您可以使用 -F{dir} 和 -I{dir} 预处理器选项来搜索 Framework/Library 目录和 Include 目录。这些将使编译器在哪里查找要链接的 *.dylib 动态库文件所在的非标准位置。
Run Code Online (Sandbox Code Playgroud)-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。
您是否希望某些动态库链接到您的应用程序由“常规”设置“链接的框架和库”决定。
有关如何管理动态加载器 (dyld) 以及使用@rpath和@loader_path宏控制依赖库位置的更多信息,请参阅: https: //developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries /100-文章/RunpathDependentLibraries.html
| 归档时间: |
|
| 查看次数: |
6360 次 |
| 最近记录: |