次のコードを 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");
}