iOS framework/静态库 nm 调试
来源:互联网 发布:淘宝可以寄到台湾吗 编辑:程序博客网 时间:2024/06/11 03:01
iOS开发引入静态库时, 经常遇到类似错误Undefined symbols for architecture x86_64: "_xxxx", referenced from: ...
。此时,可以进入到静态库所在目录下,使用 nm
命令查看该架构下是否存在该符号: nm mySDK -arch x86_64 | grep '_xxxx'
功能
nm命令可以列出一个函数库文件(.o .a .so)中的符号表。所谓符号,通常指定义出的函数,全局变量等等。它对于静态的函数库和共享的函数库都起作用。nm命令显示的信息用于调试库和可执行文件,对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多少行定义的,不过这必须要求编译该函数库的时候加“-l”选项。
使用
nm [选项] [文件列表(库文件/目标文件/可执行文件)]
有用的options:
-A
在每个符号信息的前面打印所在对象文件名称;
-B
全局非初始化数据段(BBS段)的符号,其值表示该符号在bss段中的偏移;
-b
全局static的符号;
-C
输出demangle过了的符号名称;
-D
打印动态符号,只显示动态符号,当使用动态库时很有用;
-g
只显示全局符号的相关信息;
-l
使用对象文件中的调试信息,为每一个符号查找和显示所在源文件及行号;
-N
debug用的符号;
-n
按照地址/符号值来排序;
-r
const型只读的变量(readonly);
-T
位于代码区的符号,比如函数main;
-t
位于代码区的符号,一般是static函数;
-u
打印出那些未定义的符号,即位于目标模块的外部符号,比如系统的printf()函数;
-w
给出更多警告信息;
-V
nm命令版本号;
常见的符号类型:
A
该符号的值在今后的链接中将不再改变;
B
该符号放在BSS段中,通常是那些未初始化的全局变量;
D
该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
T
该符号放在代码段中,通常是那些全局非静态函数;
U
该符号未定义过,需要自其他对象文件中链接进来;
W
未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。
举例
更详细的内容见man page。这里举例说明:
nm -u hello.o
显示hello.o 中的未定义符号,需要和其他对象文件进行链接。
nm -A /usr/lib/* 2>/dev/null | grep "T memset"
在 /usr/lib/ 目录下找出哪个库文件定义了memset函数。
nm AlipaySDK -arch arm64 | grep '_RSA_ver'
在
AlipaySDK
这个framework中,查找arm64
架构下的_RSA_ver
符号。
- iOS framework/静态库 nm 调试
- iOS 静态库,动态库与 Framework
- iOS 静态库,动态库与 Framework
- ios 静态库/动态库/framework
- iOS 静态库,动态库与 Framework
- IOS-静态库,动态库与 Framework
- iOS静态库(.a 和framework)
- iOS静态库(.a 和framework)
- iOS开发 xcode6制作framework静态库
- ios开发-- xcode6创建静态库framework
- iOS 静态库 [.a 和 framework]
- iOS静态库 【.a 和framework】
- iOS 静态库开发(.a)( framework)
- iOS基础 - 创建framework静态库
- iOS静态库和Framework区别
- iOS静态库.framework的制作
- iOS .framework静态库的封装
- IOS静态库的加载和调试
- Java实现定时任务的三种方法
- C++之变量的初始化
- eclipse下用link方式安装maven 插件失败
- C++程序设计语言练习5.3 typedef的使用
- HDU 5372 (树状数组 离散化)
- iOS framework/静态库 nm 调试
- toolbar
- Oracle EBS 供应商银行创建
- setcookie各个参数详解
- kafka入门(一)
- 网络通信之HTTP
- Android APK反编译就这么简单 详解(附图)
- 比较无聊的一个东西:用数据结构的内容整合成的一个程序900多行代码.
- 提醒下自己