静态库冲突 & Git (20)

简介: 静态库冲突 & Git (20)

静态库冲突 & 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


llvm-objcopy --prefix-symbols=Cat_ (但是不支持MachO)
llvm-objcopy --redefine-syms "旧"="新" 拖拽地址
会报错 -> 因为原生系统没有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




目录
相关文章
|
21天前
|
算法 网络安全 开发工具
[Git]关联远程库的两种方法及配置
本文介绍了 git 的四种连接方式:ssh 连接、HTTPS 连接、SVN 连接和 SVN + ssh 连接,重点讲解了 HTTPS 和 ssh 连接方式的配置及注意事项。文章详细解释了 HTTPS 连接的身份验证过程、常见问题及解决方案,以及 ssh 连接的公钥和私钥的创建、配置方法。此外,还介绍了如何在同一台电脑上连接多个 gitee 账号的方法。
57 0
[Git]关联远程库的两种方法及配置
|
3月前
|
存储 开发工具 数据库
什么是 Git 存储库?
【8月更文挑战第14天】
164 3
|
6月前
|
存储 项目管理 开发工具
如何使用 Git Clean 清理 Git 存储库?
【4月更文挑战第9天】
1048 9
如何使用 Git Clean 清理 Git 存储库?
|
6月前
|
开发工具 git
git使用笔记-修改url并与远端库合并
git使用笔记-修改url并与远端库合并
37 1
|
开发工具 git
git--创建版本库
git--创建版本库
|
程序员 开发工具 数据安全/隐私保护
轻松掌握Git开发(五)远程库的基本操作
轻松掌握Git开发(五)远程库的基本操作
|
Shell 网络安全 开发工具
Git本地库和Github远程库推送、拉取和克隆操作指令及团队内协作和跨团队协作
介绍Git 本地库和 Github 远程库推送、拉取及克隆命令操作 详细模拟实现了团队内协作和跨团队协作
258 0
|
存储 开发工具 git
使用Git中,经常用commit -m推送到版本库?版本库又是什么?
使用Git中,经常用commit -m推送到版本库?版本库又是什么?
|
前端开发 测试技术 持续交付
从0搭建Vue3组件库(十三):引入Husky规范git提交
从0搭建Vue3组件库(十三):引入Husky规范git提交
427 0
|
Linux 开发工具 git
【Git】一文带你入门Git分布式版本控制系统(创建版本库、 版本回退)
【Git】一文带你入门Git分布式版本控制系统(创建版本库、 版本回退)
115 0