出于好奇心的考虑,我试图看看用最少的汇编语言制作C程序的最小.我想看看我是否可以使用动态链接的OpenGL和GLUT进行简单的OpenGL演示(即演示场景),而无需标准库.但是,我遇到了最基本的问题.
我创建了一个包含的测试main.c文件
void newStart() {
//Do stuff here...
asm("movl $1, %eax;"
"xorl %ebx, %ebx;"
"int $0x80;");
}
Run Code Online (Sandbox Code Playgroud)
我正在制作它
gcc main.c -nostdlib -e newStart -o min
Run Code Online (Sandbox Code Playgroud)
使用此StackOverflow问题建议的'-e'选项.我尝试编译时遇到以下错误:
ld: warning: symbol dyld_stub_binder not found, normally in libSystem.dylib
ld: entry point (newStart) undefined. for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
我正在运行OS X 10.7(Lion).谁能帮我吗?
小智 3
对于newStart(),对应的符号是_newStart。您应该将其用于选项-e:
gcc main.c -nostdlib -e _newStart -o min
Run Code Online (Sandbox Code Playgroud)
请参阅此堆栈溢出问题,了解为什么在(外部)函数名称前添加下划线:为什么 C 编译器在外部名称前添加下划线?