美文网首页
静态库冲突 & Git (20)

静态库冲突 & Git (20)

作者: 为了自由的白菜 | 来源:发表于2021-04-19 09:13 被阅读0次

静态库冲突 & Git (20)

静态库冲突

冲突本质

-Objc 以及 -all_load 都没有问题, 都可以正常编译 -> 编译器优化
同一个静态库, 不同的名字(AFNetWorking 与 AFNetWorking2) -> -all_load & -ObjC (注意大小写) ->会导致冲突
本质是符号冲突
section, 存放类信息 -> class_ro, class_rw

解决冲突

  1. 只有全局符号才会引起冲突
  2. 文件冲突 -> ar -> 静态库解压 -> 去除重名文件
  3. 不是文件冲突 改名字 (但是一般拿不到源码)
  4. 没有源码 符号表 + 前缀或者后缀重命名重复符号
  5. objcopy -> --prefix-symbols=prefix
    1. llvm-objcopy --prefix-symbols=Cat_ (但是不支持MachO)
    2. llvm-objcopy --redefine-syms "旧"="新" 拖拽地址
    3. 会报错 -> 因为原生系统没有llvm-objcopy -> 找到llvm-objcopy工程找到错误 -> 添加case, break; -> 编译运行

旧符号 Cat_符号(注意一定要放前面, 不然会被认为是OC符号)

实际开中

  1. nm -gUAj 静态包 显示所有全局符号
  2. python 来写
import subprocess
import re

def getSymbols(path):
    return subprocess.getoutput(f'nm -gUAj {path}')
    
def writeNewSymbolsToFile(syms, path, newPath)
    newStr = re.sub(rf'{path}[:](.+)(.o:)', '', syms)
    print(newStr)
    lines = newStr.splitlines()
    newSys = ''
    for s in lines:
        word = s.strip('\n')
        # word Cat_word
        newSys += word + ' ' + f'_Cat{word}' + '\n'
        print(newStr)
    with open(newPath, 'w') as file:
        file.write(newSys)

if __name__ == '__main__';
    path = '静态库路径'
    sys = getSymbols(path)
    # 注意路径可以拼一个简单的
    writeNewSymbolsToFile(sys, path, "新路径")

-all_load 还是有问题 -> 改的符号太多(因为是全都修改了, 不冲突的也修改了)

  • 把冲突的其中一个改成动态库就可以 (二级命名空间)
    • 二级命名空间 -> APP 使用 动态库符号 -> 查找方法是 动态库名字.sys

Git

远程仓库

// 远程仓库拉取
git init --bare

相关文章

  • 静态库冲突 & Git (20)

    静态库冲突 & Git (20) 静态库冲突 冲突本质 -Objc 以及 -all_load 都没有问题, 都可以...

  • 解决iOS静态库文件冲突

    iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离

  • 静态库.a冲突

    查看包信息:lipo -info libx.a 如果提示fat file,那么代表这个包是支持多平台的,例如arm...

  • 静态库冲突

    后来反馈以后移除了相同文件,不需要了。总不能每次sdk出来,repeat yourself 以下是记录:以后不同第...

  • Git(二)

    一. 静态库符号冲突解决 1.1 链接同名静态库会不会冲突? 首先打开第一份工程LGTestApp,导入了AFNe...

  • git---第七篇 版本回退 版本备份

    总结: 版本回退: 冲突的处理: 讲一下静态库在git里面的操作: A:xcode操作 首先有个注意事项, 如果你...

  • git 常用命名及日常问题解决

    先看张原理图 暂存区相关指令 本地库 远程库 日志及回滚 git的冲突发生 git的stash git合并出现冲突...

  • git常用指令

    上传文件:git add . //添加到静态库git commit -m "xxxxxx" ...

  • MT MD 讲解

    (114条消息) 静态库、动态库、静态链接、动态链接、系统运行库混合、MD MT默认库冲突问题wxlfreewin...

  • Git 关联远程库

    git idea /wstorm 冲突解决 Conflict resolve git 远程库关联 删除origin...

网友评论

      本文标题:静态库冲突 & Git (20)

      本文链接:https://www.haomeiwen.com/subject/pmzblltx.html