SDL_mixer 2 编译在窗口中使用 Visual Studio Express 和 SDL2 中断

SDL_mixer 2 compilation broken in windows using visual studio express with SDL2

本文关键字:Studio Visual Express 中断 SDL2 mixer 编译 窗口 SDL      更新时间:2023-10-16

我尝试使用 SDL2 编译 SDL_mixer 2 检查了以下最新代码:

http://hg.libsdl.org/SDL_mixerSDL2 和 SDL_image 也编译没有问题。

编译时SDL_mixer IM收到编译错误:

1>Compiling...
1>dynamic_mp3.c
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SDL_Rect' : redefinition; different basic types
1>        d:cpp2dlovelov8libsdlincludesdl_rect.h(69) : see declaration of 'SDL_Rect'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SMPEG_FilterInfo' : redefinition; different basic types
1>        d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(33) : see declaration of 'SMPEG_FilterInfo'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : 'type'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : ')'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(46) : error C2061: syntax error : identifier 'SMPEG_FilterCallback'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(48) : error C2059: syntax error : '}'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(56) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(59) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(62) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2081: 'SMPEG_Filter' : name in formal parameter list illegal
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2059: syntax error : ')'
1>mixer.c
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SDL_Rect' : redefinition; different basic types
1>        d:cpp2dlovelov8libsdlincludesdl_rect.h(69) : see declaration of 'SDL_Rect'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SMPEG_FilterInfo' : redefinition; different basic types
1>        d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(33) : see declaration of 'SMPEG_FilterInfo'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : 'type'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : ')'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(46) : error C2061: syntax error : identifier 'SMPEG_FilterCallback'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(48) : error C2059: syntax error : '}'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(56) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(59) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(62) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2081: 'SMPEG_Filter' : name in formal parameter list illegal
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2059: syntax error : ')'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixermixer.c(129) : warning C4090: 'function' : different 'const' qualifiers
1>d:cpp2dsdl2.0sdl-2.0sdl_mixermixer.c(1145) : warning C4090: 'function' : different 'const' qualifiers
1>music.c
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SDL_Rect' : redefinition; different basic types
1>        d:cpp2dlovelov8libsdlincludesdl_rect.h(69) : see declaration of 'SDL_Rect'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2371: 'SMPEG_FilterInfo' : redefinition; different basic types
1>        d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(33) : see declaration of 'SMPEG_FilterInfo'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2143: syntax error : missing ';' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : 'type'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(39) : error C2059: syntax error : ')'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(46) : error C2061: syntax error : identifier 'SMPEG_FilterCallback'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(48) : error C2059: syntax error : '}'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(56) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(59) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludempegfilter.h(62) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing ')' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2081: 'SMPEG_Filter' : name in formal parameter list illegal
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2143: syntax error : missing '{' before '*'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixervisualcexternalincludesmpeg.h(180) : error C2059: syntax error : ')'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixermusic.c(166) : warning C4090: 'function' : different 'const' qualifiers
1>d:cpp2dsdl2.0sdl-2.0sdl_mixermusic.c(625) : warning C4047: 'return' : 'Mix_Music *' differs in levels of indirection from 'int'
1>d:cpp2dsdl2.0sdl-2.0sdl_mixermusic.c(1529) : warning C4090: 'function' : different 'const' qualifiers

有人知道吗?

我认为您可以删除MP3_MUSIC预处理器宏或在搜索路径中包含 smpeg。

查看预处理器定义。

删除这些

MOD_MUSIC
MOD_DYNAMIC="libmikmod-2.dll"
OGG_MUSIC
OGG_DYNAMIC="libvorbisfile-3.dll"
FLAC_MUSIC
FLAC_DYNAMIC="libFLAC-8.dll"
MP3_MUSIC
MP3_DYNAMIC="smpeg.dll"

如果要在音频中使用任何这些文件类型,则还需要获取这些.dll文件。我建议静态而不是动态编译这些库,以使事情更加跨平台兼容。