我正在使用mingw-w64在Windows上编译ffmpeg,并且我需要SDL2,以便ffmpeg中的ffplay能够编译。我使用Web安装程序安装了mingw-w64,并使用mingw-w64提供的多合一软件包安装了msys(以运行ffmpeg附带的./configure
)。我通过从他们的站点下载开发二进制文件并在msys中运行make native
来安装SDL2。
因此,似乎SDL2没有正确安装或什么。
这是./configure
中有问题的部分:
if enabled sdl2; then
echo "SDL2-1"
SDL2_CONFIG="${cross_prefix}sdl2-config"
test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent
echo "SDL2-2"
if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
echo "SDL2-3"
sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
echo "SDL2-config ${SDL2_CONFIG}"
echo "SDL2-cflags ${sdl2_cflags}"
echo "SDL2-libs ${sdl2_extralibs}"
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
echo "SDL2-4" &&
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
echo "SDL2-5" &&
check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
echo "SDL2-6-final" &&
enable sdl2
fi
if test $target_os = "mingw32"; then
sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
fi
fi
这是它的结果,它永远不会到达SDL2-6-final
和enable sdl2
SDL2-1
SDL2-2
SDL2-3
SDL2-config sdl2-config
SDL2-cflags -I/usr/include/SDL2 -Dmain=SDL_main
SDL2-libs -L/usr/lib -lmingw32 -lSDL2main -lSDL2 -mwindows
SDL2-4
SDL2-5
这是sdl2安装日志:
User@NEW-PC /c/Users/User/Downloads/games/compilers/SDL2-2.0.9
$ make native
make install-package arch=i686-w64-mingw32 prefix=/usr
make[1]: Entering directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9'
`bin/sdl2-config' -> `/usr/bin/sdl2-config'
`bin/SDL2.dll' -> `/usr/bin/SDL2.dll'
`include' -> `/usr/include'
`include/SDL2' -> `/usr/include/SDL2'
`include/SDL2/begin_code.h' -> `/usr/include/SDL2/begin_code.h'
`include/SDL2/close_code.h' -> `/usr/include/SDL2/close_code.h'
`include/SDL2/SDL.h' -> `/usr/include/SDL2/SDL.h'
`include/SDL2/SDL_assert.h' -> `/usr/include/SDL2/SDL_assert.h'
`include/SDL2/SDL_atomic.h' -> `/usr/include/SDL2/SDL_atomic.h'
`include/SDL2/SDL_audio.h' -> `/usr/include/SDL2/SDL_audio.h'
`include/SDL2/SDL_bits.h' -> `/usr/include/SDL2/SDL_bits.h'
`include/SDL2/SDL_blendmode.h' -> `/usr/include/SDL2/SDL_blendmode.h'
`include/SDL2/SDL_clipboard.h' -> `/usr/include/SDL2/SDL_clipboard.h'
`include/SDL2/SDL_config.h' -> `/usr/include/SDL2/SDL_config.h'
`include/SDL2/SDL_cpuinfo.h' -> `/usr/include/SDL2/SDL_cpuinfo.h'
`include/SDL2/SDL_egl.h' -> `/usr/include/SDL2/SDL_egl.h'
`include/SDL2/SDL_endian.h' -> `/usr/include/SDL2/SDL_endian.h'
`include/SDL2/SDL_error.h' -> `/usr/include/SDL2/SDL_error.h'
`include/SDL2/SDL_events.h' -> `/usr/include/SDL2/SDL_events.h'
`include/SDL2/SDL_filesystem.h' -> `/usr/include/SDL2/SDL_filesystem.h'
`include/SDL2/SDL_gamecontroller.h' -> `/usr/include/SDL2/SDL_gamecontroller.h'
`include/SDL2/SDL_gesture.h' -> `/usr/include/SDL2/SDL_gesture.h'
`include/SDL2/SDL_haptic.h' -> `/usr/include/SDL2/SDL_haptic.h'
`include/SDL2/SDL_hints.h' -> `/usr/include/SDL2/SDL_hints.h'
`include/SDL2/SDL_joystick.h' -> `/usr/include/SDL2/SDL_joystick.h'
`include/SDL2/SDL_keyboard.h' -> `/usr/include/SDL2/SDL_keyboard.h'
`include/SDL2/SDL_keycode.h' -> `/usr/include/SDL2/SDL_keycode.h'
`include/SDL2/SDL_loadso.h' -> `/usr/include/SDL2/SDL_loadso.h'
`include/SDL2/SDL_log.h' -> `/usr/include/SDL2/SDL_log.h'
`include/SDL2/SDL_main.h' -> `/usr/include/SDL2/SDL_main.h'
`include/SDL2/SDL_messagebox.h' -> `/usr/include/SDL2/SDL_messagebox.h'
`include/SDL2/SDL_mouse.h' -> `/usr/include/SDL2/SDL_mouse.h'
`include/SDL2/SDL_mutex.h' -> `/usr/include/SDL2/SDL_mutex.h'
`include/SDL2/SDL_name.h' -> `/usr/include/SDL2/SDL_name.h'
`include/SDL2/SDL_opengl.h' -> `/usr/include/SDL2/SDL_opengl.h'
`include/SDL2/SDL_opengles.h' -> `/usr/include/SDL2/SDL_opengles.h'
`include/SDL2/SDL_opengles2.h' -> `/usr/include/SDL2/SDL_opengles2.h'
`include/SDL2/SDL_opengles2_gl2.h' -> `/usr/include/SDL2/SDL_opengles2_gl2.h'
`include/SDL2/SDL_opengles2_gl2ext.h' -> `/usr/include/SDL2/SDL_opengles2_gl2ext.h'
`include/SDL2/SDL_opengles2_gl2platform.h' -> `/usr/include/SDL2/SDL_opengles2_gl2platform.h'
`include/SDL2/SDL_opengles2_khrplatform.h' -> `/usr/include/SDL2/SDL_opengles2_khrplatform.h'
`include/SDL2/SDL_opengl_glext.h' -> `/usr/include/SDL2/SDL_opengl_glext.h'
`include/SDL2/SDL_pixels.h' -> `/usr/include/SDL2/SDL_pixels.h'
`include/SDL2/SDL_platform.h' -> `/usr/include/SDL2/SDL_platform.h'
`include/SDL2/SDL_power.h' -> `/usr/include/SDL2/SDL_power.h'
`include/SDL2/SDL_quit.h' -> `/usr/include/SDL2/SDL_quit.h'
`include/SDL2/SDL_rect.h' -> `/usr/include/SDL2/SDL_rect.h'
`include/SDL2/SDL_render.h' -> `/usr/include/SDL2/SDL_render.h'
`include/SDL2/SDL_revision.h' -> `/usr/include/SDL2/SDL_revision.h'
`include/SDL2/SDL_rwops.h' -> `/usr/include/SDL2/SDL_rwops.h'
`include/SDL2/SDL_scancode.h' -> `/usr/include/SDL2/SDL_scancode.h'
`include/SDL2/SDL_sensor.h' -> `/usr/include/SDL2/SDL_sensor.h'
`include/SDL2/SDL_shape.h' -> `/usr/include/SDL2/SDL_shape.h'
`include/SDL2/SDL_stdinc.h' -> `/usr/include/SDL2/SDL_stdinc.h'
`include/SDL2/SDL_surface.h' -> `/usr/include/SDL2/SDL_surface.h'
`include/SDL2/SDL_system.h' -> `/usr/include/SDL2/SDL_system.h'
`include/SDL2/SDL_syswm.h' -> `/usr/include/SDL2/SDL_syswm.h'
`include/SDL2/SDL_test.h' -> `/usr/include/SDL2/SDL_test.h'
`include/SDL2/SDL_test_assert.h' -> `/usr/include/SDL2/SDL_test_assert.h'
`include/SDL2/SDL_test_common.h' -> `/usr/include/SDL2/SDL_test_common.h'
`include/SDL2/SDL_test_compare.h' -> `/usr/include/SDL2/SDL_test_compare.h'
`include/SDL2/SDL_test_crc32.h' -> `/usr/include/SDL2/SDL_test_crc32.h'
`include/SDL2/SDL_test_font.h' -> `/usr/include/SDL2/SDL_test_font.h'
`include/SDL2/SDL_test_fuzzer.h' -> `/usr/include/SDL2/SDL_test_fuzzer.h'
`include/SDL2/SDL_test_harness.h' -> `/usr/include/SDL2/SDL_test_harness.h'
`include/SDL2/SDL_test_images.h' -> `/usr/include/SDL2/SDL_test_images.h'
`include/SDL2/SDL_test_log.h' -> `/usr/include/SDL2/SDL_test_log.h'
`include/SDL2/SDL_test_md5.h' -> `/usr/include/SDL2/SDL_test_md5.h'
`include/SDL2/SDL_test_memory.h' -> `/usr/include/SDL2/SDL_test_memory.h'
`include/SDL2/SDL_test_random.h' -> `/usr/include/SDL2/SDL_test_random.h'
`include/SDL2/SDL_thread.h' -> `/usr/include/SDL2/SDL_thread.h'
`include/SDL2/SDL_timer.h' -> `/usr/include/SDL2/SDL_timer.h'
`include/SDL2/SDL_touch.h' -> `/usr/include/SDL2/SDL_touch.h'
`include/SDL2/SDL_types.h' -> `/usr/include/SDL2/SDL_types.h'
`include/SDL2/SDL_version.h' -> `/usr/include/SDL2/SDL_version.h'
`include/SDL2/SDL_video.h' -> `/usr/include/SDL2/SDL_video.h'
`include/SDL2/SDL_vulkan.h' -> `/usr/include/SDL2/SDL_vulkan.h'
`lib/cmake' -> `/usr/lib/cmake'
`lib/cmake/SDL2' -> `/usr/lib/cmake/SDL2'
`lib/cmake/SDL2/sdl2-config.cmake' -> `/usr/lib/cmake/SDL2/sdl2-config.cmake'
`lib/libSDL2.a' -> `/usr/lib/libSDL2.a'
`lib/libSDL2.dll.a' -> `/usr/lib/libSDL2.dll.a'
`lib/libSDL2.la' -> `/usr/lib/libSDL2.la'
`lib/libSDL2main.a' -> `/usr/lib/libSDL2main.a'
`lib/libSDL2main.la' -> `/usr/lib/libSDL2main.la'
`lib/libSDL2_test.a' -> `/usr/lib/libSDL2_test.a'
`lib/libSDL2_test.la' -> `/usr/lib/libSDL2_test.la'
`lib/pkgconfig' -> `/usr/lib/pkgconfig'
`lib/pkgconfig/sdl2.pc' -> `/usr/lib/pkgconfig/sdl2.pc'
`share/aclocal/sdl2.m4' -> `/usr/share/aclocal/sdl2.m4'
make[1]: Leaving directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9'
这就是当我仅注释掉最后一次签入./configure
并启用sdl2时发生的情况:
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
我尝试使用msys2代替,它可以编译,但是由于某些原因,那里的调试器不起作用。我需要在调试器中运行ffmpeg的源代码,才能有机会了解那里的内容。我需要使用代码块和gdb的组合,并且使用msys2编译的程序使用奇怪的路径名,如/c/bla/bla/bla/bla/main.c,而代码块也因此而被淘汰了。 mingw-w64使用了更多合理的路径名,我刚刚检查了一下。
选中ffbuild/config.log
,问题就在这里:
`c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2`
更多详细信息:
test_pkg_config sdl2 sdl2 >= 2.0.1 sdl2 < 2.1.0 SDL_events.h SDL_PollEvent
pkg-config --exists --print-errors sdl2 >= 2.0.1 sdl2 < 2.1.0
check_func_headers SDL_events.h SDL_PollEvent -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2
test_ld cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2
test_cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib
BEGIN /tmp/ffconf.atBoPojc/test.c
1 #include <SDL_events.h>
2 #include <stdint.h>
3 long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; }
4 int main(void) { int ret = 0;
5 ret |= ((intptr_t)check_SDL_PollEvent) & 0xFFFF;
6 return ret; }
END /tmp/ffconf.atBoPojc/test.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 -D__printf__=__gnu_printf__ -D_WIN32_WINNT=0x0600 -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c11 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -c -o /tmp/ffconf.atBoPojc/test.o /tmp/ffconf.atBoPojc/test.c
C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c: In function 'check_SDL_PollEvent':
C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c:3:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; }
^
gcc -Wl,--nxcompat,--dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--image-base,0x140000000 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -o /tmp/ffconf.atBoPojc/test.exe /tmp/ffconf.atBoPojc/test.o -lmingw32 -lSDL2main -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
collect2.exe: error: ld returned 1 exit status
好的,我设法编译了。我从C:/msys/lib
删除了sdl库,并将它们添加到C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\lib