链接未使用的目标文件会破坏程序

Linking an Unused Object File Breaks the Program

作为 gccMCUs 世界的新手,我看到了一个奇怪的行为,希望有人能帮助我。我可以毫无问题地为我的 armv7e-m 开发板 (CC3220S_LAUNCHXL) 创建并执行一个简单的应用程序。但是,当我 link 一个未在任何地方引用且未引用任何其他代码的目标文件时,程序将停止在板上执行。没有编译或 link 时间错误;只是程序不行。

我的问题是 link 一个未使用的目标文件会如何中断程序执行?

My question is how linking an unused object file would break the program execution?

许多 种方式可以发生这种情况。示例:

#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 之前就死掉了。

Just the program won't work.

如果您提供 "won't work" 确切含义的详细信息并自行进行一些调试,您可能会得到更有用的答案。