作者:吴小熙1108 | 来源:互联网 | 2023-05-24 15:39
我正在使用一个非常具体的工具链(ADI公司的SHARC DSP处理器),我希望能更好地理解我的编译器/链接器.
我有一个易变的全局变量:
volatile long foo;
这个变量没有被使用,也没有在我的代码中引用,但是我希望将它保存在我的最终可执行文件中(不要问我为什么,这个可悲的事实很难过).
我通常将我的项目与-e
选项链接起来.它告诉链接器从可执行文件中删除死代码.我最初认为没有编译器敢于删除任何全局变量,特别是如果这些符号被声明为volatile.不幸的是.
然后我找到了一个非常具体的编译指示#pragma retain_name
,告诉链接器保留符号,即使它从未使用过.
我想知道在某些ISO/POSIX标准中是否可以找到这种情况.我总是认为编译器或链接器都不会对易失性符号做出任何假设.因此,没有编译器会尝试从最终的可执行文件中删除死的volatile变量或函数.
我错了吗?