gcc -nostdlib在SDL_OpenAudio()中导致分段错误

时间:2013-03-28 21:26:29

标签: c linux audio gcc sdl

当我使用gcc -nostartfiles或-nostdlib编译以下代码时,运行生成的程序会在调用SDL_OpenAudio()时导致Audio系统内部崩溃。没有这个电话,一切正常,甚至其他图书馆工作。在没有-nostartfiles / -nostdlib的情况下编译(并将_start重命名为main并注释程序集退出调用)它工作正常。

我的问题:是什么导致了对gcc启动代码的依赖,如何在不删除-nostartfiles / -nostdlib的情况下修复它?

我正在使用gcc 4.7.2

在x86_64上编译linux 64 Bit
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");
}

0 个答案:

没有答案