在windows下,Qt下编译MLT7遇到的问题undefined reference to SDL_PollEvent

在windows下,Qt下编译MLT遇到的问题undefined reference to SDL_PollEvent

最近在Qt的mingw环境下编译MLT框架,遇到个小问题。

D:\mlt-7.0.1\Build>mingw32-make
[ 17%] Built target mlt
[ 17%] Linking C executable ..\..\out\melt.exe
CMakeFiles\melt.dir/objects.a(melt.c.obj):melt.c:(.text+0x11c1): undefined reference to `SDL_PollEvent'
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [src\melt\CMakeFiles\melt.dir\build.make:103: out/melt.exe] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:165: src/melt/CMakeFiles/melt.dir/all] Error 2
mingw32-make: *** [Makefile:129: all] Error 2

初看起来是找不到sdl2的库,其实这个问题是生成脚本的问题,我已经在Qt环境中加入了SDL2的库,它还是没找到。

 仔细分析了出错的地方,是在Link生成melt.exe时出现的,相关的obj和a文件其实都有,估计只是link命令少了参数。

由于提示目录是[src\melt\CMakeFiles\melt.dir\build.make:103:    进入该目录,看到了各种中间文件,发现有一个link.txt,打开它,发现只是三行要运行的命令。

打开它,在刚才的命令行中一个一个执行一下(注意执行目录是D:\mlt-7.0.1\Build\src\melt>),发现前两个都没问题。第三个有问题。仔细看看,其实gcc后跟着的参数已经有了-lmingw32 -lSDL2main -lSDL2这三项,因此估计还是有其他问题,再仔细看参数最后有个变量 @CMakeFiles\melt.dir\linklibs.rsp,也是这个目录下的。

在 Build\src\melt\CMakeFiles\melt.dir 目录中找到linklibs.rsp文件,用记事本打开,果然,这个里面也有很多-l参数,在后面加上

-lmingw32 -lSDL2main -lSDL2

再执行mingw32-make(注意目录是Build),成功生成melt.exe及其他动态库

D:\mlt-7.0.1\Build>mingw32-make
[ 17%] Built target mlt
[ 17%] Linking C executable ..\..\out\melt.exe
[ 18%] Built target melt
[ 31%] Built target mlt++
[ 53%] Built target mltcore
[ 55%] Built target mltdecklink
[ 56%] Built target mltjackrack
[ 59%] Built target mltkdenlive
[ 61%] Built target mltnormalize
[ 65%] Built target mltoldfilm
[ 80%] Built target mltplus
[ 85%] Built target mltplusgpl
[ 86%] Automatic MOC for target mltqt
[ 86%] Built target mltqt_autogen
[ 95%] Built target mltqt
[ 96%] Built target mltrtaudio
[ 97%] Building C object src/modules/xine/CMakeFiles/mltxine.dir/cpu_accel.c.obj
[ 98%] Linking C shared module ..\..\..\out\lib\mlt\libmltxine.dll
[100%] Built target mltxine

解决了

又经过思考,发现是CMAKE中的CMAKE_C_STANDARD_LIBRARIES中加入-lmingw32 -lSDL2main -lSDL2

你可能感兴趣的:(Qt,qt,开发语言,1024程序员节)