embed的意思 是嵌入, 动态库用do not embed, 保证全局唯一, 静态库用embed, 可能会重复引用, 造成包体积大
- 两个静态库中如果有相同的静态库(比如系统的libc++, libstdc++), 那么暴露的类或者方法也可能会有多份, 造成无效或者冲突导致崩溃
- 动态库打包的时候选择do not embed, 否则这个动态库中静态库如果包含了相同的动态库, 那么暴露的类或者方法也可能会有多份, 造成无效或者冲突导致崩溃(AppService中包含静态库魔链, 在引入佳物的静态库, 编译成功后执行到某方法就会报错)
- 静态库一定要选择embed, 否则会报 undefined symbol, (ps: image not found 一般是动态库找不到)
- 如果在动态库中有静态库, 则需要通过脚本在主工程中将静态库embed, 这样在工程在编译的时候会把pods中静态库单独拎出来打到主工程的二进制中, 剩下的动态库统一打在pods库中, 全局唯一, 否则该动态库会报no such module,
- 解决两个静态库冲突的办法, 就是将两个静态库打到不同的动态库中, 这样他们就会被打包成不同的二进制, 就不会互相链接, 就不会互相影响了
网友评论