【发布时间】:2015-04-07 15:31:02
【问题描述】:
我有一个家庭作业,要求我们使用系统调用而不是标准库来打开、读取和写入文件。为了调试它,我想在测试编译项目时使用标准库。我这样做了:
#ifdef HOME
//Home debug prinf function
#include <stdio.h>
#else
//Dummy prinf function
int printf(const char* ff, ...) {
return 0;
}
#endif
我这样编译它:gcc -DHOME -m32 -static -O2 -o main.exe main.c
问题是我有-nostdlib参数,标准入口点是void _start,但没有参数,入口点是int main(const char** args)。你可能会这样做:
//Normal entry point
int main(const char** args) {
_start();
}
//-nostdlib entry point
void _start() {
//actual code
}
在这种情况下,这就是在没有-nostdlib 的情况下编译时得到的结果:
/tmp/ccZmQ4cB.o: In function `_start':
main.c:(.text+0x20): multiple definition of `_start'
/usr/lib/gcc/i486-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o:(.text+0x0): first defined here
因此我需要检测是否包含stdlib,在这种情况下不要定义_start。
【问题讨论】: