小编Kri*_*isB的帖子

当SHARED lib引用它们时,为什么STATIC lib中的未使用对象包含在最终二进制文件中?

摘要:

STATIC和SHARED lib之间的交叉使用函数导致STATIC lib的所有对象(甚至未使用!)都包含在最终的二进制文件中!

你不明白我的意思吗?:-P

坐下来阅读下面的完整故事!名字已经改变,以保护无辜.示例的目标是简单性和可重复性.

预告片:有一个SSCCE可用!(简短,自包含,正确(可编译),例如:http://www.sscce.org/ )

一开始,我有:

  • 一个binary(main)调用fun1a()存储在STATIC lib(libsub.a)中的function (). main还有一个内部函数(mainsub()).

  • 一个STATIC lib(libsub.a),它包含SEVERAL对象,每个对象都有其他几个使用的函数.

main在二进制文件中编译结果,该二进制文件包含包含引用函数的对象(STATIC lib)的副本.在下面的示例中,main将只包含object的函数shared1.o(因为main是调用func1a())和NOT函数shared2.o(因为没有引用).

好 !

  main.c                 libsub.a    
+-------------+        +------------+
| main        |        | shared1.o  |
|  func1a()   | <----> |   func1a() |
|  mainsub()  |        |   func1b() |
+-------------+        |    ----    |
                       | shared2.o  | …
Run Code Online (Sandbox Code Playgroud)

c unix linker shared-libraries static-libraries

6
推荐指数
1
解决办法
496
查看次数

标签 统计

c ×1

linker ×1

shared-libraries ×1

static-libraries ×1

unix ×1