交叉编译Mesa,X11lib,Qt opengl
记录Mesa配置文件如下:
Mesa版本:Mesa-10.2.3
- 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
- 或者
- unset PKG_CONFIG_PATH
- export PKG_CONFIG_PATH=/home/work/DownLoad/presen/lib/pkgconfig:/home/work/DownLoad/libdrm/lib/pkgconfig
- 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"
- 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配置:
- ./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
- make && make install
- qmake.conf中需要加入:QMAKE_LIBS_OPENGL_ES2 = -lglapi -lGLESv2 -lEGL
- 这是由于libGLESv2.so依赖于libglapi.so,可以用arm-none-linux-gnueabi-ld查看关系库的依赖关系。Mesa交叉编译的时候如果没有 --enable-shared-glapi,则会报如下错误:
- libGLESv2.so: undefined reference to '_glapi_get_dispatch'
- libGLESv2.so: undefined reference to'_glapi_Dispatch'
XLib所有源码下载地址:
- 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的配置如下:
- 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的那一句脚本,例如本例中为:
- vim configure
- 查找checking whether malloc(0) returns Null...这一句,得到以下信息
- # Check whether --enable-malloc0returnsnull was given.
- if test "${enable_malloc0returnsnull+set}" = set; then
- enableval=$enable_malloc0returnsnull; MALLOC_ZERO_RETURNS_NULL=$enableval
- else
- MALLOC_ZERO_RETURNS_NULL=auto
- fi
- { $as_echo "$as_me:$LINENO: checking whether malloc(0) returns NULL" >&5
- $as_echo_n "<span style="color:#FF0000;">checking whether malloc(0) returns NULL... " >&6; }
- if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then
- if test "$cross_compiling" = yes; then
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
- $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: cannot run test program while cross compiling
- See \`config.log' for more details." >&2;}
由于他是在if test "${enable_malloc0returnsnull+set}" = set;

- make clean && make distclean
- rm -rf arm-linux.cache
- echo enable_malloc0returnsnull=yes>arm-linux.cache
- 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
- make && make install
- CFLAGS="-I/home/work/DownLoad/libX11/include -L/home/work/DownLoad/libX11/lib",这句制定xPorto的路径,因为需要用到xProto中的x.h
交叉编译X11需要交叉编译Xproto(版本xproto-7.0.17):
Xporto下载地址:
- http://cgit.freedesktop.org/xorg/proto/xproto/
- configXproto.sh如下:
- 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
- make && make install
由于需要用到Xtrans.h,故而需要下载xtrans,下载地址为:
- http://www.x.org/releases/X11R7.5/src/lib/
我所选的版本为:xtrans-1.2.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/ --host=arm-linux --target=arm-linux --cache-file=arm-linux.cache
- 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下载地址:
- http://cgit.freedesktop.org/xorg/proto/kbproto/
kbproto-1.0.6交叉编译和上面的类似:
- make clean && make distclean
- rm -rf configure
- ./autogen.sh
- 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
- make && make install
需要XI.h,需要下载inputproto-2.1.99.6,下载地址为:
- http://cgit.freedesktop.org/xorg/proto/inputproto/
iputProto-2.1.99.6交叉编译和上面类似
- make clean && make distclean
- rm -rf configure
- ./autogen.sh
- 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,下载地址
- http://xcb.freedesktop.org/dist/
libxcb-1.8.1交叉编译如下:
- export PKG_CONFIG_PATH=/home/work/DownLoad/libX11/xcbproto/lib/pkgconfig
- make clean && make distclean
- rm -rf arm-linux.cache
- echo ac_cv_path_XSLTPROC=/home/work/DownLoad/libX11/libxslt/bin > arm-linux.cache
- 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
- 错误信息:configure: error: XCB requires xsltproc
下载xsltproc,下载地址:
- https://git.gnome.org/browse/libxslt/
- <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,下载地址:
- ftp://xmlsoft.org/libxml2/
- 交叉编译和上面的类似
- xcb需要xcb-proto,下载地址:http://xcb.freedesktop.org/dist/
- xcb-proto-1.7交叉编译如下:
- 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
- make && make install
- xcb需要libxau,下载地址:http://cgit.freedesktop.org/xorg/lib/libXau/
- libXau-1.0.7交叉编译:
- make clean && make distclean
- rm -rf configure
- ./autogen.sh
- 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"
- make && make instal
附录一下交叉编译成功后的lib库的下载地址,用以以后下载使用:
http://download.csdn.net/detail/mkndg/7738667
交叉编译Mesa,X11lib,Qt opengl的更多相关文章
- Qt OpenGL三维绘图
简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...
- QT OpenGL中文教程在QT4版本后的错误代码更改(一)
由于教程中说的已经够可以了,这里就不对代码进行分析了,有兴趣可以自己去看看.这个教程来源于原来的NeHeOpenGL中文教程 (http://www.yakergong.net/nehe/) ,但其有 ...
- ubuntu下配置qt+opengl+opencv
原地址:http://www.cnblogs.com/aleny-liu/archive/2011/12/16/aleny-Qtnote1.html http://blog.csdn.net/jdh9 ...
- 【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)
承接上文http://www.cnblogs.com/bombe1013/p/3294301.html,我们接下来说说Qt的移植与安装. 很喜欢Qt这个库以及Qt creater这个IDE,其实个人觉 ...
- Qt OpenGL 鼠标拾取实现
在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...
- QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)
本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...
- 初探 Qt Opengl【2】
最近在研究QOPengl QGraphicsView QGraphicsItemQGraphicsScene不过也只是皮毛,也不是做什么技术贴,就是记录一下自己在其中遇到的问题,和自己新学到的东西. ...
- 初探Qt Opengl【1】
最近一直在学习Qt的opengl绘图,看到好多资源都是关于以前的旧版本的, 我将我这几天学的的部分关于opengl的做个总结,也希望对需要学习的人有一定的帮助 在我的学习中,我主要用到一下三个方法 # ...
- 45.Qt openGL实现三维绘图
main.cpp #include <QApplication> #include <iostream> #include "tetraheadron.h" ...
随机推荐
- easyUI combox静态动态联动
easyUI重写了select,取而代之的是combobox,有如下几种方式可以创建一个combobox 1.使用select标签,并加上class="easyui-combobox&quo ...
- head&&tail
//參考<Linux shell脚本攻略 第2版> 1,head a)打印前10行: ubuntu@VM-62-13-ubuntu:~$ head file b)打印前5行: ubuntu ...
- OpenCV学习笔记二:OpenCV模块一览
注:本系列博客基于OpenCV 2.9.0.0 一,一览图: 二,模块: /* 基础库 */ 1,opencv_core(链接) ,opencv最基础的库.包含exception,point,rect ...
- js创建对象的最佳方式
1.对象的定义 ECMAScript中,对象是一个无序属性集,这里的“属性”可以是基本值.对象或者函数 2.数据属性与访问器属性 数据属性即有值的属性,可以设置属性只读.不可删除.不可枚举等等 访问器 ...
- jmeter操作myql数据库
1.先安装mysql的驱动mysql-connector-java-5.1.7-bin.jar 配置jdbc的connection configuration Database Url :jdbc:m ...
- hdu1174(3维射线与圆是否相交)
简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...
- 关于错误处理程序中【return】的用法
先让俺这位新人帮各位有幸游览到我博客文章的叔叔阿姨哥哥姐姐们解释一下什么是错误处理?即:当程序发生错误时,保证程序不会异常中断的机制. 那么为什么程序中会有错误处理呢?像我们通常无论是玩手机或者玩游戏 ...
- iOS10通知框架UserNotifications
在iOS10上,苹果将原来散落在UIKit中各处的用户通知相关的代码进行重构,剥离,打造了一个全新的通知框架-UserNotifications.笔者最近在开发公司通知相关的需求,跟着WWDC2016 ...
- django-websocket 安装及配置
1.安装 dwebsocket (venv) C:\code_object\websocketTest>pip install dwebsocket -i https://pypi.douban ...
- 如何查看l操作系统是否开启rpc服务
linux操作系统 在linux 5.X以及下的版本你可以通过service portmap status命令查看rpc是否启动.如果提示running,表示正在运行:如果提示stop就是关闭了.如果 ...