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

sem*_*ght 5 c macos assembly

出于好奇心的考虑,我试图看看用最少的汇编语言制作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 编译器在外部名称前添加下划线?