我在gcc编译选项下遇到了-nostartfiles
和-nostdlib
个选项。但是,我不明白如何为上述选项编写代码。您是否需要编写每个启动函数(如_start
,__libc_csu_init
等)?
我是否可以获得这两个选项的简化代码,只是为了理解它的工作?
修改:
另外,我发现使用static
和nostartfiles
会引发segmentation fault
。一个简单的c代码来重现它:
#include<stdio.h>
#include<stdlib.h>
void _start()
{
int x = main();
exit(x);
}
int main()
{
printf("Hello world!\n");
return 0;
}
使用编译:
gcc -nostartfiles -static -o foo foo.c
上述代码的输出为segmentation fault
。这是预期的产出吗?
答案 0 :(得分:0)
是的,这是预期的行为。 如果您想编写自己的启动代码或自己的标准库,则需要这些选项,否则您无法编写自己的代码,因为符号会被复制。