问题
xcode打包出现问题:Found an unexpencted Mach-O header code: 0x72613c21
具体问题描述点击我
解答:
参考1,从编译与连接过程去思考
.c文件预处理为.i文件,再编译为.s文件,再汇编转为.o文件,然后通过链接(静态链接或者动态链接),然后链接到可执行文件.so,运行
这里我们的问题关键在于 链接这个步骤;
链接的过程,也就是符号重定位;c/c++程序的编译是以文件为单位进行的,因此每个c/cpp文件也叫做一个编译单元,源文件先是被编译成一个个目标文件,再由连接器把这些目标文件组合成一个可执行文件或库,链接的过程,其核心工作是解决模块间各种符号(变量、函数)相互引用的问题,对符号的引用本质是对其在内存中具体地址的引用,因此确定符号地址编译,链接,加载过程中一项不可缺少的工作,这就是所谓的符号重定位。本质上来说,符号重定位要解决的是当前编译单元如何访问【外部】符号的问题
参考2
参考3
当我把原本在Embedded Binaries这里的库,全部删除,然后通过Link Binary with Libraries直接导入后,会报上面的出错,即:image not found
解决方法是:在Build Phases上添加分组Copy Files,把Embedded Binaries删除的库,导入这里来就可以。
加入到Embedded Binaries的包其实都是静态库,虽然是以.framework之名,以动态库的方式打成的动态库,本质上还是静态库
happy coding~