使用C创建一个小型的可执行文件

时间:2011-11-09 23:43:06

标签: c macos assembly

出于好奇心的考虑,我试图看看用最少的汇编语言制作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)。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

对于newStart(),相应的符号为_newStart。您应该将其用于-e选项:

gcc main.c -nostdlib -e _newStart -o min

请参阅此Stack Overflow问题,了解为什么下划线附加到(外部)函数名称:Why do C compilers prepend underscores to external names?