摘要:
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)