热门发布
网 安 课 堂 网站域名那些事儿 跟着互联网的蓬勃发展,小我或企业开办的网站也越来越
技术学习 2025-04-14
“每逢佳节胖三斤”。有什么小本事可以在享受美食的同时治理好体重?大夫教你6个办法
生活常用 2025-04-15
1.山药插根筷子,好削皮 2.透明胶粘在扫把上,清算头发和灰尘 3.放片大蒜在食用油里,
生活常用 2025-04-24
每个人都希望自己拥有好的口才,无论是在职场上还是在生活中,好口才对个人的帮助是非
生活常用 2025-04-03
1、不管昨天如何,本日又是全新的开始。与其担忧未来,不如把每一天活得出色。专心
励志成长 2025-04-18

iOS三方静态库符号冲突的原因以及解决方案

王腾胜猎人 显示全部楼层 发表于 2024-12-30 10:35 |阅读模式 打印 上一主题 下一主题
动态库由于二级命名空间,不会符号冲突
静态库是.o文件的合集,最终生成macho需要链接 ,被主app项目符号合并
app里的符号会把静态库的符号链接到一起,合并成一张符号表,在链接静态库符号时候,
other linker Flags 就是对链接静态库的配置
dead strip
不被main函数引用,的非导出符号会被干掉, oc默认都是导出符号,加个static就是本地符号了, 由于库要暴露一些方法被外界调用,所以导出符号不可以被干掉
默认配置other link flags是 -noall_load
Xlinker -noall_load:dead strip,默认不加载所有静态库的所有,有一样的类,只加载一个
-Xlinker -all_load :不dead strip,加载所有静态库的全部代码
-Xlinker -ObjC:加载全部OC相关代码,包括分类
-force_load: 指定要加载那个静态库的全部代码
-Xlinker就是告诉clang向ld传递参数,并且以上四个参数只对链接静态库时起作用,Xcode Build Settings中的dead_strip是链接器提供的一种优化方式,和这里链接静态库传递的参数不是一回事。
我们cocoapods里面other link flags Xlinker的配置是-ObjC,如果两个不同名字静态库有一样的类就冲突了
用llvm 的 llvm-objcopy  --redefine-syms命令来修改冲突的符号
llvm-objcopy可执行文件可以用配置好的llvm编译好得到
要单一架构静态库处理符号,如果是多架构自行剥离,分别处理再合并

1  创建 aaa.m文件 写入新旧符号
拷贝冲突的符号  OBJC_CLASS
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有招是一个优质的生活妙招创作平台,在这里,你可以任意分享你的妙招经验,日常生活、技能学习、成长励志、恋爱婚姻……我们相信,每个人都有独特的生活妙招,有着无穷的创造力。
  • 官方手机版

  • 微信公众号

  • 商务合作