Xcode clang link: 构建动态框架(或 dylib)未嵌入依赖项
Xcode clang link: Build Dynamic Framework (or dylib) not embed dependencies
我正在为 iOS 构建一个动态框架。它需要从代码或其他库中引用一些符号,但我不想 link 它们进入框架。
这可以在构建静态库时实现,只需设置搜索路径并确保它们不包含在目标的构建阶段。
但是在构建动态框架或dylib时,出现未定义符号错误。我尝试了各种 link 选项,例如 -l
-weak_library
-weak_framework
-I
-rpath
-rpath-link
。但是 none 有效。
link 命令如下所示:
clang -arch x86_64 -dynamiclib
-isysroot *iPhone_SDK_PATH*
*OPTIONS_NOT_IMPORTANT*
-install_name @rpath/Foo.framework/Foo
-Xlinker -rpath -Xlinker @executable_path/Frameworks
-Xlinker -rpath -Xlinker @loader_path/Frameworks
-Xlinker -rpath -Xlinker *BUILD_PATH*
-mios-simulator-version-min=7.0
-Xlinker -no_deduplicate
-Xlinker -objc_abi_version
-Xlinker 2
-fobjc-arc -fobjc-link-runtime
-framework Foundation
-single_module
-compatibility_version 1
-current_version 1
-Xlinker -dependency_info
-Xlinker *BUILD_PATH*/Foo.build/Objects-normal/x86_64/Foo_dependency_info.dat
-o *BUILD_PATH*/Foo.framework/Foo
clang用ld命令做最后的link,查了手册发现-U
和-undefined
可以忽略未定义的符号
-U symbol_name
Specified that it is ok for symbol_name to have no definition. With two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images.
-未定义处理
Specifies how undefined symbols are to be treated. Options are: error, warning, suppress, or dynamic_lookup. The default is error.
所以最终的解决方案是将-Wl,-undefined,dynamic_lookup
设置为OTHER_LDFLAGS
,同时确保搜索路径设置正确。有效。
我正在为 iOS 构建一个动态框架。它需要从代码或其他库中引用一些符号,但我不想 link 它们进入框架。
这可以在构建静态库时实现,只需设置搜索路径并确保它们不包含在目标的构建阶段。
但是在构建动态框架或dylib时,出现未定义符号错误。我尝试了各种 link 选项,例如 -l
-weak_library
-weak_framework
-I
-rpath
-rpath-link
。但是 none 有效。
link 命令如下所示:
clang -arch x86_64 -dynamiclib
-isysroot *iPhone_SDK_PATH*
*OPTIONS_NOT_IMPORTANT*
-install_name @rpath/Foo.framework/Foo
-Xlinker -rpath -Xlinker @executable_path/Frameworks
-Xlinker -rpath -Xlinker @loader_path/Frameworks
-Xlinker -rpath -Xlinker *BUILD_PATH*
-mios-simulator-version-min=7.0
-Xlinker -no_deduplicate
-Xlinker -objc_abi_version
-Xlinker 2
-fobjc-arc -fobjc-link-runtime
-framework Foundation
-single_module
-compatibility_version 1
-current_version 1
-Xlinker -dependency_info
-Xlinker *BUILD_PATH*/Foo.build/Objects-normal/x86_64/Foo_dependency_info.dat
-o *BUILD_PATH*/Foo.framework/Foo
clang用ld命令做最后的link,查了手册发现-U
和-undefined
可以忽略未定义的符号
-U symbol_name
Specified that it is ok for symbol_name to have no definition. With two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images.
-未定义处理
Specifies how undefined symbols are to be treated. Options are: error, warning, suppress, or dynamic_lookup. The default is error.
所以最终的解决方案是将-Wl,-undefined,dynamic_lookup
设置为OTHER_LDFLAGS
,同时确保搜索路径设置正确。有效。