BB9*_*B9z 3 xcode hyperlink clang dylib ld
I\xe2\x80\x99m 为 iOS 构建动态框架。它需要引用代码或其他库中的一些符号,但我不想将它们链接到框架中。
\n\n这可以在构建静态库时实现,只需设置搜索路径并确保它们不包含在 target\xe2\x80\x99s 构建阶段中。
\n\n但是当构建动态框架或dylib时,会导致未定义符号错误。我尝试了各种链接选项,例如-l -weak_library -weak_framework -I -rpath -rpath-link。但没有一个有效。
链接命令如下所示:
\n\nclang -arch x86_64 -dynamiclib\n -isysroot *iPhone_SDK_PATH* \n *OPTIONS_NOT_IMPORTANT* \n -install_name @rpath/Foo.framework/Foo\n -Xlinker -rpath -Xlinker @executable_path/Frameworks\n -Xlinker -rpath -Xlinker @loader_path/Frameworks\n -Xlinker -rpath -Xlinker *BUILD_PATH*\n -mios-simulator-version-min=7.0\n -Xlinker -no_deduplicate\n -Xlinker -objc_abi_version\n -Xlinker 2 \n -fobjc-arc -fobjc-link-runtime\n -framework Foundation\n -single_module\n -compatibility_version 1\n -current_version 1\n -Xlinker -dependency_info\n -Xlinker *BUILD_PATH*/Foo.build/Objects-normal/x86_64/Foo_dependency_info.dat \n -o *BUILD_PATH*/Foo.framework/Foo\nRun Code Online (Sandbox Code Playgroud)\n
clang 使用 ld 命令进行最终链接,我查了手册,发现-U可以-undefined忽略未定义的符号。
-U 符号名称
指定symbol_name没有定义也是可以的。使用two_levelnamespace,生成的符号将被标记为dynamic_lookup,这意味着dyld将搜索所有加载的图像。
- 未明确的治疗
指定如何处理未定义的符号。选项有:错误、警告、抑制或动态查找。默认是错误。
所以最终的解决方案设置-Wl,-undefined,dynamic_lookup为OTHER_LDFLAGS,同时确保搜索路径设置正确。有用。
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |