【问题标题】:Why do not symbol conflict when contain same static library?为什么包含相同的静态库时符号不冲突?
【发布时间】:2018-05-28 13:52:03
【问题描述】:

有一个静态库名为libstatic1.a,另一个静态库名为libstatic2.a测试应用名为testapp

libstatic1.a 有一个方法testcmethds

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

testapp 链接 libstatic1.alibstatic2.a

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

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

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

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

【问题讨论】:

    标签: xcode linker static-libraries


    【解决方案1】:

    为什么没有符号冲突

    不存在冲突,因为链接器从不将包含 _testcmethds 的对象从 libstatic2.a 拉入链接。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2018-12-16
      • 2020-06-23
      • 2015-06-24
      • 2017-03-23
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多