1: 头文件找不到
配置Target的”Build Settings -> Search Paths -> Header Search Paths” 中添加头文件的搜索路径
2: NSObjCRuntime的编译错误
NSObjCRuntime.h:400:1: Expected unqualified-id
NSObjCRuntime.h:402:19: Unknown type name ‘NSString’
这是因为项目中有c++的代码 需要修改编译配置 “Build Settings -> Apple LLVM 6.1 - language -> Compile Sources As” 修改成 “Objective-C++”
3: ARC相关的编译错误
‘release’ is unavailable: not available in automatic reference counting mode
这是因为项目中默认使用ARC方式编译 需要修改编译配置 “Build Settings -> Apple LLVM 6.1 - language - Objective C -> Objective-C Automatic Reference Counting” 修改成 “NO”
4: 预编译宏导致的编译错误
这里我们实际需要包含的头文件是”iPhoneClientConfig.h” 即添加”IPHONE_PLATFORM_BUILD”的编译宏
需要修改编译配置 “Build Settings -> Apple LLVM 6.1 - Preprocessing -> Preprecessor Macros” 添加 “IPHONE_PLATFORM_BUILD”
5: build成功了但framework bundle文件却没有生成
第一次编译framework工程时 请做如下设置 “Product -> Destination -> iOS Device” 再次编译framework bundle文件则正常生成
6: 生成的framework bundle里没有头文件和库文件
没有头文件是因为没有在 “Targets -> Build Phases -> Headers” 中添加相应的头文件
没有生成库文件是因为没有在 “Targets -> Build Phases -> Compile Sources” 中添加任何源文件
7: 编译错误”ISO C++ forbids forward references to ‘enum’ types”
这是因为没有包含该枚举定义的头文件 包含相应的头文件即可
8: 引用framework的工程链接时出错(1)
Undefined symbols for architecture x86_64:
链接出错的原因比较多 这里解决的是因架构不一致导致的问题
首先查看framework bundle里的库文件的架构 是”armv7 arm64” 即 “iOS Device”
而引用framework的工程编译的目标架构是”x86_64” 即 “iOS Simulator”
所以需要让framework的架构和引用framework的架构保持一致 即可解决该链接错误
9: 引用framework的工程链接错误(2)
“_ALAssetPropertyType”, referenced from: iPhoneMediaManager::getMediaIds(ALAsset, int, int, Funambol::ArrayList) in make-framework
这是因为framework工程依赖的framework并没有包含到实际工程中来
添加所依赖的第三方framework如下
10: 引用framework的工程链接错误(3)
Undefined symbols for architecture armv7: “vtable for cxxabiv1::vmi_class_type_info”, referenced from: typeinfo for Funambol::ArrayListEnumeration in make-framework NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
这是因为framework工程使用的是”Objective-C++“编译器编译的 所引用framework的工程默认的是”Objective-C”编译器编译
这里可以将工程中任意一个”.m”的源文件扩展名修改成”.mm”
或者将”Build Settings -> Apple LLVM 6.2 - Language -> Compile Sources As” 也修改成 “Objective-C++”
11: 引用framework的工程链接错误(4)
ld: warning: directory not found for option ‘-L/Users/yuanlin/Workspace/CloudPhone/CloudPhone/Library/FunambolLib’
找不到链接目标文件夹 需要将已删除的文件夹从 “Build Settings -> Library Search paths” 中删除
12: 引用framework的工程链接错误(5)
ld: 2 duplicate symbols for architecture armv7
有两种可能性:
(1) 项目的不同group里有相同名称的类 因为Objective-C不支持命名空间 所以推荐要加上命名前缀
这里是因为framework工程和引用framework的工程分别引用了”OpenUDID.h” 导致出现了重复定义 暂时是通过修改其中一个类名来解决该链接错误
(2) xcode的自动完成特性 在你导入头文件的时候 将”.h”补成了”.m”