项目中导入2个静态库SA和SB,其中SA库代码如下:
image.pngSB库代码如下:
image.png
此时mach-o文件中的符号如下:
image.png
只有一个用T修饰的_testc。
程序运行起来结果是啥呢?
打印 image.png相当于一个testc的方法没有被链接进mach-o文件。
如果要把2个同名c方法都链接进来可以加上-all_load标志,但是编译会报错:duplicate symbol '_testc' in。
意思就是有2个同名符号。
此时mach-o文件中的符号如下:
image.png
发现有2个_testc符号了,但是是用t修饰的。
那2个不同的库一定要有同名c方法咋办呢?
可以修改代码如下:
image.png
加上static修饰符就行了,此时可以打印sa和sb了。
c语言static修饰函数请参考:https://www.cnblogs.com/XiaoXiaoShuai-/p/12008646.html
关于nm命令查看符合,t和T代表的含义可以查看:https://www.mkssoftware.com/docs/man1/nm.1.asp
image.png
网友评论