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