交叉编译Mesa,X11lib,Qt opengl

记录Mesa配置文件如下:

Mesa版本:Mesa-10.2.3

  1. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/Mesa --target=arm-linux --host=arm-linux --enable-gles2 --enable-gles1 --disable-glx --enable-egl --disable-dri --enable-shared-glapi --with-egl-platforms=fbdev --with-dri-drivers=swrast  
  2. 或者  
  3. unset PKG_CONFIG_PATH  
  4. export PKG_CONFIG_PATH=/home/work/DownLoad/presen/lib/pkgconfig:/home/work/DownLoad/libdrm/lib/pkgconfig  
  5. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --target=arm-linux --host=arm-linux --prefix=/home/work/DownLoad/Mesa-10.0 --enable-gl --enable-gles2 --enable-gles1 --enable-opengl --enable-shared-glapi --disable-dri --enable-shared-dricore --enable-gles1 --enable-opengl --enable-gallium-egl --with-egl-platforms=fbdev --with-gallium-drivers=swrast --with-dri-drivers=swrast CFLAGS="-I/home/work/DownLoad/libudev/include -L/home/work/DownLoad/libudev/lib/arm-linux-gnueabi"  
  6. make &&make install  
1 Mesa-10.3.5
#arm-linux
CC=/opt/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/opt/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/Mesa --target=arm-linux --host=arm-linux --enable-gles2 --enable-gles1 --disable-glx --enable-egl --disable-dri --enable-shared-glapi --with-egl-platforms=fbdev --with-dri-drivers=swrast
---- configure: error: Package requirements (libdrm_radeon >= 2.4.56) were not met:
Requested 'libdrm_radeon >= 2.4.56' but version of libdrm_radeon is 2.4.52
安装libdrm-2.4.58
CC=/opt/Sourcery_G++_Lite4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux
-----configure: error: Package requirements (pciaccess >= 0.10) were not met:
No package 'pciaccess' found
安装 sudo apt-get install libpciaccess-dev


------CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /root/桌面/Mesa-10.3.5/bin/missing aclocal-1.14 -I m4
/root/桌面/Mesa-10.3.5/bin/missing: 行 81: aclocal-1.14: 未找到命令
WARNING: 'aclocal-1.14' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [aclocal.m4] 错误 127
解决方法 sudo autoreconf -ivf
--------./configure: line 6427: syntax error near unexpected token `2.2'
./configure: line 6427: `LT_PREREQ(2.2)'
解决方法:1 apt-get libtool 2 把源文件目录清空,build目录也清空,重新解压,重新配置编译就行。
/* 
automake >= 1.11.1 (AM_INIT_AUTOMAKE([1.11.1])) (or 1.10.3, Automake < 1.10.3 and 1.11 are known to be suffering from critical security issues)
autoconf >= 2.64 (AC_PREREQ(2.64))
libtool >= 2.2.6 (LT_PREREQ([2.2.6]))
intltool >= 0.40.0 (IT_PROG_INTLTOOL([0.40.0]))
*/
---------/bin/bash: yacc: 未找到命令
make[2]: *** [../../src/mesa/program/program_parse.tab.c] 错误 127
make[2]:正在离开目录 `/root/桌面/Mesa-10.3.5/src/mesa'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/root/桌面/Mesa-10.3.5/src'
make: *** [all-recursive] 错误 1
解决方法yacc和lex在ubuntu使用flex和bison代替,此处安装bison就是安装yacc 执行命令 : $sudo apt-get install bison $sudo apt-get install flex



------CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /root/桌面/Mesa-10.3.5/bin/missing aclocal-1.14 -I m4
/root/桌面/Mesa-10.3.5/bin/missing: 行 81: aclocal-1.14: 未找到命令
WARNING: 'aclocal-1.14' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [aclocal.m4] 错误 127
解决方法 sudo autoreconf -ivf
--------./configure: line 6427: syntax error near unexpected token `2.2'
./configure: line 6427: `LT_PREREQ(2.2)'
解决方法:1 apt-get libtool 2 把源文件目录清空,build目录也清空,重新解压,重新配置编译就行。
/* 
automake >= 1.11.1 (AM_INIT_AUTOMAKE([1.11.1])) (or 1.10.3, Automake < 1.10.3 and 1.11 are known to be suffering from critical security issues)
autoconf >= 2.64 (AC_PREREQ(2.64))
libtool >= 2.2.6 (LT_PREREQ([2.2.6]))
intltool >= 0.40.0 (IT_PROG_INTLTOOL([0.40.0]))
*/
---------/bin/bash: yacc: 未找到命令
make[2]: *** [../../src/mesa/program/program_parse.tab.c] 错误 127
make[2]:正在离开目录 `/root/桌面/Mesa-10.3.5/src/mesa'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/root/桌面/Mesa-10.3.5/src'
make: *** [all-recursive] 错误 1
解决方法yacc和lex在ubuntu使用flex和bison代替,此处安装bison就是安装yacc 执行命令 : $sudo apt-get install bison $sudo apt-get install flex

Qt配置:

  1. ./configure -prefix /usr/local/qt-5.2.1-embedded-arm-quick -release -opensource -qt-libpng -qt-libjpeg -plugin-sql-sqlite -widgets -qt-sql-sqlite -make libs -no-cups -no-nis -no-iconv -no-dbus -no-openssl -no-iconv -no-accessibility -no-javascript-jit -no-sse2 -silent -xplatform  linux-arm-gnueabi-g++  -nomake tools -nomake examples -nomake tests -qt-freetype -opengl es2  -qreal float -no-glib -strip -xinput2 -linuxfb -plugindir /usr/local/qt-5.2.1-embedded-arm-quick/plugin -qmldir /usr/local/qt-5.2.1-embedded-arm-quick/qml -importdir /usr/local/qt-5.2.1-embedded-arm-quick/imports  -L/home/work/DownLoad/Mesa/lib -I/home/work/DownLoad/Mesa/include -confirm-license "$@" -verbose  
  2. make && make install  
  3. qmake.conf中需要加入:QMAKE_LIBS_OPENGL_ES2 = -lglapi -lGLESv2 -lEGL  
  4. 这是由于libGLESv2.so依赖于libglapi.so,可以用arm-none-linux-gnueabi-ld查看关系库的依赖关系。Mesa交叉编译的时候如果没有 --enable-shared-glapi,则会报如下错误:  
  5. libGLESv2.so: undefined reference to '_glapi_get_dispatch'  
  6. libGLESv2.so: undefined reference to'_glapi_Dispatch'   


XLib所有源码下载地址:

  1. http://cgit.freedesktop.org/xorg/  

http://cgit.freedesktop.org/xorg/

ubuntu 命令行批量下载: wget -r -np -nd ftp://mirrors.go-part.com/xorg/X11R7.7/


记录LibX11-1.3.2的配置如下:

  1. echo enable_malloc0returnsnull=yes>arm-linux.cache  

这一句是为了保证可以交叉编译,不然交叉编译的时候test是不会过的,会报如下错误:

checking whether malloc(0) returns NULL... configure: error: in `/home/work/DownLoad/libX11-1.3.2':
configure: error: cannot run test program while cross compiling

这是由于xlib在使用--host=arm-linux的时候禁止交叉编译。解决方法为从congfirue中找到报错的那一句,查看具有+set的那一句脚本,例如本例中为:

  1. vim configure  
  2. 查找checking whether malloc(0) returns Null...这一句,得到以下信息  
  3. # Check whether --enable-malloc0returnsnull was given.  
  4. if test "${enable_malloc0returnsnull+set}" = set; then  
  5.   enableval=$enable_malloc0returnsnull; MALLOC_ZERO_RETURNS_NULL=$enableval  
  6. else  
  7.   MALLOC_ZERO_RETURNS_NULL=auto  
  8. fi  
  9.   
  10.   
  11. { $as_echo "$as_me:$LINENO: checking whether malloc(0) returns NULL" >&5  
  12. $as_echo_n "<span style="color:#FF0000;">checking whether malloc(0) returns NULL... " >&6; }  
  13. if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then  
  14.         if test "$cross_compiling" = yes; then  
  15.   { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5  
  16. $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}  
  17. { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling  
  18. See \`config.log' for more details." >&5  
  19. $as_echo "$as_me: error: cannot run test program while cross compiling  
  20. See \`config.log' for more details." >&2;}  


由于他是在if test "${enable_malloc0returnsnull+set}" = set;

在CODE上查看代码片派生到我的代码片

  1. make clean && make distclean  
  2. rm -rf arm-linux.cache  
  3. echo enable_malloc0returnsnull=yes>arm-linux.cache  
  4. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/ --disable-xf86bigfont --host=arm-linux --target=arm-linux  CFLAGS="-I/home/work/DownLoad/libX11/include -I/home/work/DownLoad/libX11/libxcb/include -L/home/work/DownLoad/libX11/lib -L/home/work/DownLoad/libX11/libxcb/lib" --includedir=/home/work/DownLoad/libX11/include XPROTO_LIBS=/home/work/DownLoad/libX11/lib --cache-file=arm-linux.cache  
  5. make && make install  
  1. CFLAGS="-I/home/work/DownLoad/libX11/include -L/home/work/DownLoad/libX11/lib",这句制定xPorto的路径,因为需要用到xProto中的x.h  

交叉编译X11需要交叉编译Xproto(版本xproto-7.0.17):

Xporto下载地址:

  1. http://cgit.freedesktop.org/xorg/proto/xproto/  
  2. configXproto.sh如下:  
  1. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/ --host=arm-linux --target=arm-linux  
  2. make && make install  

由于需要用到Xtrans.h,故而需要下载xtrans,下载地址为:

  1. http://www.x.org/releases/X11R7.5/src/lib/  

我所选的版本为:xtrans-1.2.5

交叉编译和上面的类似

  1. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/ --host=arm-linux --target=arm-linux --cache-file=arm-linux.cache  
  2. make && make install  

由于报错XKB.c:36:37: fatal error: X11/extensions/XKBproto.h: No such file or directory,故而还需要用到kbproto-1.0.6

kbproto-1.0.6下载地址:

  1. http://cgit.freedesktop.org/xorg/proto/kbproto/  

kbproto-1.0.6交叉编译和上面的类似:

  1. make clean && make distclean  
  2. rm -rf configure  
  3. ./autogen.sh  
  4. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/kbproto --host=arm-linux --target=arm-linux   
  5. make && make install  


需要XI.h,需要下载inputproto-2.1.99.6,下载地址为:

  1. http://cgit.freedesktop.org/xorg/proto/inputproto/  

iputProto-2.1.99.6交叉编译和上面类似

  1. make clean && make distclean  
  2. rm -rf configure  
  3. ./autogen.sh  
  4. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/inputporto/ --host=arm-linux --target=arm-linux  

错误:../include/X11/Xlib-xcb.h:7:21: fatal error: xcb/xcb.h: No such file or directory
需要下载libXcb,下载地址

  1. http://xcb.freedesktop.org/dist/  

libxcb-1.8.1交叉编译如下:

  1. export PKG_CONFIG_PATH=/home/work/DownLoad/libX11/xcbproto/lib/pkgconfig  
  2. make clean && make distclean  
  3. rm -rf arm-linux.cache  
  4. echo ac_cv_path_XSLTPROC=/home/work/DownLoad/libX11/libxslt/bin > arm-linux.cache  
  5. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/libxcb/ CFLAGS="-I/home/work/DownLoad/libX11/libxslt/include -I/home/work/DownLoad/libX11/LibXau/include -I/home/work/DownLoad/libX11/include -L/home/work/DownLoad/libX11/libxslt/lib -L/home/work/DownLoad/libX11/LibXau/lib" --host=arm-linux --target=arm-linux --cache-file=arm-linux.cache  
  6. 错误信息:configure: error: XCB requires xsltproc  

下载xsltproc,下载地址:

  1. https://git.gnome.org/browse/libxslt/  
  2. <pre name="code" class="html">CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --with-libxml-libs-prefix=/home/work/DownLoad/libX11/libxml2/lib --with-libxml-include-prefix=/home/work/DownLoad/libX11/include/libxml2/libxml/ --prefix=/home/work/DownLoad/libX11/libxslt/ --host=arm-linux --target=arm-linux  


如果已经交叉编译并且已经指定libxml2的路径,然而还是找不到libxml2,可以将在congfigure中手动指出xml的路径
LIBXML_CONFIG_PREFIX="/home/work/DownLoad/libX11/libxml2"
xsltproc需要下载libxml,下载地址:

  1. ftp://xmlsoft.org/libxml2/  
  2. 交叉编译和上面的类似  
  3.   
  4. xcb需要xcb-proto,下载地址:http://xcb.freedesktop.org/dist/  
  5. xcb-proto-1.7交叉编译如下:  
  6. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/xcbproto/ --host=arm-linux --target=arm-linux  
  7. make && make install  
  8. xcb需要libxau,下载地址:http://cgit.freedesktop.org/xorg/lib/libXau/  
  9. libXau-1.0.7交叉编译:  
  10. make clean && make distclean  
  11. rm -rf configure  
  12. ./autogen.sh  
  13. CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-g++ ./configure --prefix=/home/work/DownLoad/libX11/LibXau/ --host=arm-linux --target=arm-linux CFLAGS="-I/home/work/DownLoad/libX11/include"  
  14. make && make instal  


附录一下交叉编译成功后的lib库的下载地址,用以以后下载使用:

http://download.csdn.net/detail/mkndg/7738667

原文地址:https://www.cnblogs.com/subo_peng/p/4688259.html