链接未使用的对象文件会中断程序

时间:2017-08-10 15:14:25

标签: gcc linker arm microcontroller object-files

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

我的问题是如何链接未使用的目标文件会破坏程序执行?

1 个答案:

答案 0 :(得分:0)

  

我的问题是如何链接未使用的目标文件会破坏程序执行?

许多方法可能会发生这种情况。例如:

#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)

Voila:与该计划相关联的未引用的fn会导致其在到达main之前死亡。

  

只是该计划无法运作。

如果您提供确切的&#34;赢得工作的详细信息,您可能会得到更有用的答案。意味着,并自己做一些调试。