strip&ld
优质
小牛编辑
134浏览
2023-12-01
strip & ld
strip
作用: 剥离符号表
xcode
设置路径
TARGETS
-Build Settings
-Deployment
-Strip Style
直接修改Strip Style
并不会生效, 在它上方由Deployment PostProcessing
参数决定其是否生效, 默认是在打包的时候才会执行strip
将Deployment PostProcessing
设置成YES
后生效
通过build
日志课可见, xcode
内置的strip
执行时机在执行脚本之后(签名之前改写Mach-O
中的内容, 签名后文件就不可变了), 也意味着在xcode build settings
中设置并不能完成剥离符号表的操作
ld
需要将剥离操作提前, 在链接环节
链接器(ld
)的作用: 把多个目标文件合并在一起, 在链接期间可以对目标文件进行操作
结合Xcode与终端交互中xcode和终端实操演练
的配置, 在xcconfig
中增加如下设置
OTHER_LDFLAGS = -Xlinker -S
命令补充
Xlinker
: 实际上执行的是clang
的命令, 后面的参数传给ld
-S
: 链接时不要将debug information
放入到输出的文件中 (效果相当于strip
)
编译后, 查看xcode
-Build Settings
设置
在之前nm
的查看符号表输出结果
增加OTHER_LDFLAGS = -Xlinker -S
后
明显输出信息减少, 通过链接器控制了目标文件中的符号信息(-S
:调试信息不放入目标文件)
符号可见处理时机排序
Xcode
设置中的-O1
-Oz
编译优化选项, 生成.o
文件时的优化dead code strip
死代码剥离 链接过程中strip
剥离符号 已经生成Mach-O
, 再去剥离 + 签名
strip -x:除了全局符号都可以移除 (动态库使用)
strip -S:移除调试符号(静态库使用)
strip:除了间接符号表中使用的符号,其他符号都移除(上架App使用)