首页 > 解决方案 > 我应该如何为 gcc 的 -nostartfiles 或 -nostdlib 选项编写代码?

问题描述

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

我可以获得这两个选项的简化代码以了解它的工作原理吗?

编辑

另外我刚刚发现使用staticwithnostartfiles会抛出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. 是预期的输出吗?

标签: cgcc

解决方案


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


推荐阅读