nostdlib在SDL中导致分段错误

当我使用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");
}
链接地址: http://www.djcxy.com/p/79927.html

上一篇: nostdlib causes segmentation fault within SDL

下一篇: Does integer overflow cause undefined behavior because of memory corruption?