提问人:Dyskord 提问时间:5/10/2022 更新时间:5/10/2022 访问量:266
编译 c 程序,可以访问 stdlib 函数,但没有 _start 和所有 libc init 函数,使用 gcc
Compile c program with access to stdlib functions, but without _start and all of the libc init functions using gcc
问:
所以从本质上讲,我想用 gcc 静态编译一个 c 程序,我希望它能够链接 c stdlib 函数,但我希望它从 main 开始,而不是包括函数以及 main 之前发生的 libc init 东西。通常,当您想在没有 的情况下编译程序时,您可以使用标志运行 gcc,但我希望也能够包含来自 stdlib 的代码,而不是 libc init。有什么办法可以做到这一点吗?_start
_start
-nostdlib
我知道这可能会导致很多问题,但对于我的用例,我实际上并没有运行 c 程序本身,所以这样做是有意义的。
提前致谢
答:
1赞
Guillaume Petitjean
5/10/2022
#1
该选项告诉链接器不使用启动文件(即在 之前执行的代码)。-nostdlib
main
-nostdlib Do not use the standard system startup files or libraries when linking. No startup files and only the libraries you specify are passed to the linker, and options specifying linkage of the system libraries, such as -static-libgcc or -shared-libgcc, are ignored. The compiler may generate calls to memcmp, memset, memcpy and memmove. These entries are usually resolved by entries in libc. These entry points should be supplied through some other mechanism when this option is specified.
在低级裸机编程中经常使用此选项,以便准确控制正在发生的事情。
您仍然可以通过使用 来使用 libc 的功能。但是,请记住,某些 libc 函数依赖于启动代码。例如,在某些实现中,需要动态内存分配,堆由启动代码初始化。-lc
printf
评论
0赞
Dyskord
5/11/2022
啊,好的,谢谢,这就是我一直在寻找的,我想会完成我的任务-nostdlib -lc
评论
-lc