Static libraries GNULD是在整个对象文件中链接,还是只链接所需的函数?

Static libraries GNULD是在整个对象文件中链接,还是只链接所需的函数?,static-libraries,ld,avr-gcc,Static Libraries,Ld,Avr Gcc,我们有一个库和一个可执行文件,可以静态链接到库。我们希望最小化最终可执行文件的程序空间 根据avr libc的文件: 另一方面,我的同事们一致认为,在某些情况下,链接器会丢弃任何未使用的函数 那么谁是对的,还是我误解了什么?答案在gcc中是一致的还是我们这里只讨论avr端口?除非您告诉它,否则它不会执行死代码剥离。为此,您需要使用以下工具编译所有内容: -fdata-sections -ffunction-sections -fdata节-F功能节 以标记所有数据和功能。当与GCC链接时,您需

我们有一个库和一个可执行文件,可以静态链接到库。我们希望最小化最终可执行文件的程序空间

根据avr libc的文件:

另一方面,我的同事们一致认为,在某些情况下,链接器会丢弃任何未使用的函数


那么谁是对的,还是我误解了什么?答案在gcc中是一致的还是我们这里只讨论avr端口?

除非您告诉它,否则它不会执行死代码剥离。为此,您需要使用以下工具编译所有内容:

-fdata-sections -ffunction-sections -fdata节-F功能节 以标记所有数据和功能。当与GCC链接时,您需要通过:

-Wl,--gc-sections -Wl,--gc部分
为了垃圾收集所有未使用的节。

链接器无法知道是否会调用函数,例如通过函数指针。我猜如果源代码中提到函数名,则该函数被视为“已使用”,因此必须链接。通常它是编译器任务,如Nikos C.highlightsA“how to it version”当前位置所以我的两个消息来源都是正确的,我并没有理解所有的事情都是正确的。正如所料。谢谢你的及时答复!