【问题标题】:Linking an Unused Object File Breaks the Program链接未使用的目标文件会破坏程序
【发布时间】:2017-08-10 15:14:24
【问题描述】:
作为 gcc 和 MCUs 世界的新手,我看到了一种奇怪的行为,希望有人能帮助我。我可以毫无问题地为我的 armv7e-m 板 (CC3220S_LAUNCHXL) 创建和执行一个简单的应用程序。但是,当我链接一个未在任何地方引用且未引用任何其他代码的目标文件时,程序将停止在板上执行。没有编译或链接时错误;只是程序不起作用。
我的问题是链接一个未使用的目标文件会如何破坏程序的执行?
【问题讨论】:
标签:
gcc
linker
arm
microcontroller
object-files
【解决方案1】:
我的问题是链接一个未使用的目标文件会如何破坏程序的执行?
有许多种方式可能发生这种情况。示例:
#include <stdio.h>
int main()
{
puts("Hello!");
return 0;
}
gcc t.c && ./a.out
Hello!
到目前为止,一切都按预期进行。现在有一些破损:
// t1.c
__attribute__((constructor))
void fn() { abort(); }
gcc -w -c t1.c && gcc t.c t1.o && ./a.out
Aborted (core dumped)
瞧:链接到程序的未引用 fn 会导致它在到达 main 之前死亡。
只是程序不起作用。
如果您详细说明“不起作用”的具体含义,并自行进行一些调试,您可能会得到更有用的答案。