我应该如何为gcc编写-nostartfiles或-nostdlib选项的代码?

时间:2018-06-06 12:04:29

标签: c gcc

我在gcc编译选项下遇到了-nostartfiles-nostdlib个选项。但是,我不明白如何为上述选项编写代码。您是否需要编写每个启动函数(如_start__libc_csu_init等)?

我是否可以获得这两个选项的简化代码,只是为了理解它的工作?

修改

另外,我发现使用staticnostartfiles会引发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。这是预期的产出吗?

1 个答案:

答案 0 :(得分:0)

是的,这是预期的行为。 如果您想编写自己的启动代码或自己的标准库,则需要这些选项,否则您无法编写自己的代码,因为符号会被复制。