問題(-O3):
You must call Mix_SetMusicCMD() first No conversion from source format to float available setpriority() failed music parameter was NULL
問題(-ggdb):
You must call Mix_SetMusicCMD() first setpriority() failed WARN: Assertion failure at SDL_ChooseAudioConverters (/home/steward/Data/mmiyoo/sdl2/src/audio/SDL_audiotypecvt.c:1426), triggered 1 time: 'converters_chosen == SDL_TRUE' That operation is not supported No message system available Abort/Break/Retry/Ignore/AlwaysIgnore? [abriA] : Abort/Break/Retry/Ignore/AlwaysIgnore? [abriA] : a free(): invalid pointer Aborted
$ vim src/audio/SDL_audiotypecvt.c +1426
void SDL_ChooseAudioConverters(void) { static SDL_bool converters_chosen = SDL_FALSE; if (converters_chosen) { return; } #define SET_CONVERTER_FUNCS(fntype) \ SDL_Convert_S8_to_F32 = SDL_Convert_S8_to_F32_##fntype; \ SDL_Convert_U8_to_F32 = SDL_Convert_U8_to_F32_##fntype; \ SDL_Convert_S16_to_F32 = SDL_Convert_S16_to_F32_##fntype; \ SDL_Convert_U16_to_F32 = SDL_Convert_U16_to_F32_##fntype; \ SDL_Convert_S32_to_F32 = SDL_Convert_S32_to_F32_##fntype; \ SDL_Convert_F32_to_S8 = SDL_Convert_F32_to_S8_##fntype; \ SDL_Convert_F32_to_U8 = SDL_Convert_F32_to_U8_##fntype; \ SDL_Convert_F32_to_S16 = SDL_Convert_F32_to_S16_##fntype; \ SDL_Convert_F32_to_U16 = SDL_Convert_F32_to_U16_##fntype; \ SDL_Convert_F32_to_S32 = SDL_Convert_F32_to_S32_##fntype; \ converters_chosen = SDL_TRUE #if HAVE_SSE2_INTRINSICS if (SDL_HasSSE2()) { SET_CONVERTER_FUNCS(SSE2); return; } #endif #if HAVE_NEON_INTRINSICS if (SDL_HasNEON()) { SET_CONVERTER_FUNCS(NEON); return; } #endif #if NEED_SCALAR_CONVERTER_FALLBACKS SET_CONVERTER_FUNCS(Scalar); #endif #undef SET_CONVERTER_FUNCS SDL_assert(converters_chosen == SDL_TRUE); }
發生錯誤的位置是上面的42行,原因是HAVE_XXX_INTRINSICS並沒有被定義,而像SSE2或者NEON則是被定義在include/SDL_cpuinfo.h,因此,必須開啟--enable-cpuinfo選項才可以讓Audio正常運作
解法如下:
--enable-cpuinfo