编译SDL库报_XData32错,我看了一下SDL的讨论https://bugzilla.libsdl.org/show_bug.cgi?id=1769,SDL库这个地方是有bug,SDL2应该是修补了。https://blog.csdn.net/jhting/article/details/38523945 这个帖子里介绍说可以打补丁,我没有这么做。很多人的做法是把SDL_x11sym.h的第168、169行代码注释掉了,这样SDL库确实能编译成功,但是SDL_image-1.2库编译的时候又报错了。SDL_image-1.2库编译的时候需要SDL库,我在congfigure没有出问题,make的时候报 undefined reference to `_XData32'的错。我找到了一个好办法,将SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
修改为SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
或者这样
#ifdef LONG64
SDL_X11_MODULE(IO_32BIT)
#if SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32
SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
#else
SDL_X11_SYM(int,_XData32,(Display *dpy, register _Xconst long *data,unsigned len),(dpy,data,len),return)
#endif
SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
#endif
然后重新编译SDL,再编译SDL_image-1.2就好了。
以下是编译记录:
./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for ‘_XData32’
SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
^
./src/video/x11/SDL_x11dyn.c:95:5: note: in definition of macro ‘SDL_X11_SYM’
SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned
len),(dpy,data,len),return)
^
./src/video/x11/SDL_x11dyn.c:95:5: 附注:in definition of macro
‘SDL_X11_SYM’
rc fn params { ret p##fn args ; }
^
In file included from ./src/video/x11/SDL_x11dyn.h:34:0,
from ./src/video/x11/SDL_x11dyn.c:26:
/usr/include/X11/Xlibint.h:595:12: 附注:‘_XData32’的上一个声明在此
extern int _XData32(
gedit /usr/include/X11/Xlibint.h
#ifdef LONG64
SDL_X11_MODULE(IO_32BIT)
//SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
//SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
#endif
编译SDL_image-1.2
./configure --prefix=/usr/local/SDL_image-1.2 CFLAGS="-I/usr/local/include" SDL_LIBS="-L/usr/local/lib/libSDL.so -lSDL" LIBPNG_CFLAGS="-I/usr/local/png/include/libpng16" LIBPNG_LIBS="-L/usr/local/png/lib/libpng.a -lpng" --enable-static --enable-bmp --enable-gif --enable-jpg --enable-png --enable-tif
libtool: link: gcc -I/usr/local/png/include/libpng16 -I/usr/local/include -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/local/SDL-1.2.15/include/SDL -o .libs/showimage showimage.o ./.libs/libSDL_image.so -L/usr/local/lib/libSDL.so -lSDL -Wl,-rpath -Wl,/usr/local/SDL_image-1.2/lib
//usr/local/lib/libSDL.so: undefined reference to `_XData32'
参考:
http://www.tsheffler.com/blog/2015/05/14/build-ffplay-ffmpeg-2-6-2-on-mac-osx-10-10-2/
https://blog.csdn.net/nil_lu/article/details/52728509