首页 > 解决方案 > 为什么包含相同的静态库时符号不冲突?

问题描述

有静态库名libstatic1.a,另外一个名为libstatic2.a test app的静态库名为testapp

libstatic1.a有方法testcmethds

libstatic2.a链接,并在方法中libstatic1.a调用testcmethdssamecalltest

testapp链接libstatic1.alibstatic2.a

testapp将成功编译并正常运行。

为什么没有符号冲突,我nm -a用来检查两个.a库,它有相同的方法符号。

//in libstatic1.a
//...
0000000000000000 T _testcmethds
//...

//in libstatic2.a
//...
0000000000000000 T _testcmethds
//...

标签: xcodelinkerstatic-libraries

解决方案


为什么没有符号冲突

没有冲突,因为链接器从不将包含_testcmethdsfrom的对象拉libstatic2.a入链接。

要更好地理解这一点,请阅读thisthis

注意:在多个库中出现相同全局符号的设计非常脆弱。有一天你会后悔以这种方式设计东西。


推荐阅读