2

当我使用 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");
}
4

0 回答 0