This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
通常、链接器会抛出不被调用的函数。 -- unused_section_elimination = on (默认值)
但是,如果我指定一个 同时用于调用 foo1()和不调用 foo2()函数的段,则不管如何,这两个函数都会被链接。
我想您可以说、#pragma 段被使用、因此不会被删除、但在使用默认段(.text)时、同样未使用的函数仍然会被删除。
在第二种情况下,是否有办法防止 foo2()与编译器选项链接而不更改代码?
背景是、这是 AUTOSAR 存储器映射系统(包括 TI 提供的 MCAL (例如 Adc_Mem 453.h))的问题、在该系统中、修改代码的范围有限。 由于所有函数都共享一个通用的#pragma 段、 因此链接所有未使用的函数、从而不必要地增大程序大小。
是否有办法防止 foo2()与编译器选项链接而不更改第二种情况下的代码? [/报价]遗憾的是、不能。
详细信息... 请阅读文章 链接器命令文件入门的第一部分。 重点了解输入部分和输出部分这两个术语。 用于删除从未调用的函数(或从未引用的数据对象)的链接器功能的控制粒度是输入段。 完整的输入部分要么属于构建的一部分、要么不属于构建的一部分。 如果单个输入段包含两个函数、则如果调用了任一函数、链接器会保留整个输入段。 链接器无法以某种方式雕刻出未被调用的函数。
谢谢。此致、
-乔治