sdl是什么?这里就不解释了,之前的文中也说过。今天主要说说最近sdl给我填的堵。
这个说来话也长,由于工作需要,最近在用OpenCV,记得几年前用就用过OpenCV,或者说写过一些OpenCV的代码吧。OpenCV里面有使用OpenCL加速。早期由于OpenCV使用OpenCL主要是在PC端,所以在local size啊之类的东西都是按照pc来设置,而要把OpenCL移植到Android上,那就需要修改这些。现在看看OpenCV的源码,还有好多当年的痕迹。扯远了(吹牛结束)。。。
编译OpenCV的源码是需要依赖ffmpeg的,而ffmpeg又是依赖sdl。如果sdl出了问题,就会影响ffmpeg,例如,如果我们使用sdl2,那么ffmpeg就编译不出ffplay,只有使用sdl1才可以。原因很简单,想知道就留个言,这里就不多说了。如果ffmpeg编译出了问题,又会影响我编译OpenCV。所以,必须一步步来,先解决sdl的问题。看到这里你可能会说,下载编译好的库不就ok了吗,还这么费事编译干什么。。。你知道,我们这行都有点强迫症,遇事总要弄个究竟。
我电脑上目前用的是sdl2,编译sdl1.2的时候,总是出问题。接下来就看看出了那些问题。
编译sdl1.2命令如下:
./configure
make
make install
在make的时候出现了:
./include/SDL_syswm.h:58:10: fatal error: ‘X11/Xlib.h’ file not found
这个问题是因为没有装xquartz,下载地址:https://xquartz.en.softonic.com/mac/post-download?ext=1。装完了,还是不行,看看怎么回事吧。原来,装在了/opt/X11下面,而sdl查找的目录是/usr/local/。
好,那我重新指定查找目录:./configure CPPFLAGS=-I/opt/X11/include
这会总该可以了吧?结果还是有问题。
./src/video/quartz/SDL_QuartzVideo.h:94:5: error: unknown type name ‘CGDirectPaletteRef’
我在整个源码中找了一下grep -irn CGDirectPaletteRef . 结果没有。那是不是在别的地方,是我没有找呢?我又找了/usr/local也没有,又找找别的地方也没有。好吧,那我就把你干掉,找到这个文件的94行,我直接注释了。编译通过了。诶,好像忘了点事。。。编是编过了,但是我电脑上装的sdl2,我还得用呢,要是直接安装sdl1.2,冲突倒是不会,但是会弄的很乱,头文件,库文件都在一起,很不爽。那就自己指定个路径,那就/usr/sdl1_2_15吧。
完整的编译安装过程就是:
./configure CPPFLAGS=-I/opt/X11/include --prefix=/usr/sdl1_2_15
make -j4
make install
要是安装存在权限问题,或者加个sudo或者指定个有权限的路径就ok了。