链接未使用的目标文件会破坏程序
Linking an Unused Object File Breaks the Program
作为 gcc 和 MCUs 世界的新手,我看到了一个奇怪的行为,希望有人能帮助我。我可以毫无问题地为我的 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" 确切含义的详细信息并自行进行一些调试,您可能会得到更有用的答案。
作为 gcc 和 MCUs 世界的新手,我看到了一个奇怪的行为,希望有人能帮助我。我可以毫无问题地为我的 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" 确切含义的详细信息并自行进行一些调试,您可能会得到更有用的答案。