当我使用 gcc -nostartfiles 或 -nostdlib 编译以下代码时,运行生成的程序会在调用 SDL_OpenAudio() 时导致音频系统深处崩溃。如果没有这个调用,一切正常,甚至其他库也能正常工作。在没有 -nostartfiles/-nostdlib 的情况下编译(并将 _start 重命名为 main 并注释程序集退出调用)它工作正常。
我的问题:是什么导致了对 gcc 启动代码的这种依赖性,如何在不删除 -nostartfiles / -nostdlib 的情况下修复它?
我正在使用 gcc 4.7.2 在 x86_64 上为 linux 64 位编译
void _start()
{
SDL_AudioSpec fmt;
fmt.freq = 44100;
fmt.format = AUDIO_S16;
fmt.channels = 1;
fmt.samples = 4096;
fmt.callback = mixaudio;
fmt.userdata = NULL;
if ( SDL_OpenAudio(&fmt, NULL) < 0 ) SDL_Quit();
SDL_PauseAudio(0);
while(1){SDL_Delay(20);}
asm("xorq %rax, %rax \n movq 42, %ebx \n int 0x80");
}