c - 我应该如何为 gcc 的 -nostartfiles 或 -nostdlib 选项编写代码?
问题描述
我遇到了-nostartfiles
gcc-nostdlib
编译选项下的选项。但是,我不明白如何为上述选项编写代码。您是否需要编写每个启动函数(例如_start
等__libc_csu_init
)?
我可以获得这两个选项的简化代码以了解它的工作原理吗?
编辑:
另外我刚刚发现使用static
withnostartfiles
会抛出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
. 是预期的输出吗?
解决方案
是的,这是预期的行为。如果您想编写自己的启动代码或自己的标准库,则需要这些选项,否则您无法编写自己的代码,因为符号会重复。
推荐阅读
- javascript - Angular HTTP 拦截器测试 - 更改 window.location.href 值
- ssis - 当数据流位于 For Each 循环容器中时,记录集目标中的变量被替换了吗?
- ruby-on-rails - 为什么我在登录时收到缺少列的错误?
- centos - 如何在绑定接口中设置桥接适配器?
- python - 如何从字典列表中获取值?
- php - 我的 PHP 代码没有在我的 Ubuntu 操作系统上运行
- python - 使用 for 循环遍历多个字符串列表
- java - 如何告诉 Ignore JSON 忽略属性名称而不是其中的响应
- java - 如何覆盖依赖jar的spring上下文占位符?
- excel - VBA 故障排除工作表函数和连接运算符