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