交叉编译Mesa,X11lib,Qt opengl

记录Mesa配置文件如下:

Mesa版本:Mesa-10.2.3

[html] view plaincopy

  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

Qt配置:

[html] view plaincopy

  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 "[email protected]" -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所有源码下载地址:

[html] view plaincopy

  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的配置如下:

[html] view plaincopy

  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的那一句脚本,例如本例中为:

[html] view plaincopy

  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. { $as_echo "$as_me:$LINENO: checking whether malloc(0) returns NULL" >&5
  10. $as_echo_n "<span style="color:#FF0000;">checking whether malloc(0) returns NULL... " >&6; }
  11. if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then
  12. if test "$cross_compiling" = yes; then
  13. { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd‘:" >&5
  14. $as_echo "$as_me: error: in \`$ac_pwd‘:" >&2;}
  15. { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
  16. See \`config.log‘ for more details." >&5
  17. $as_echo "$as_me: error: cannot run test program while cross compiling
  18. See \`config.log‘ for more details." >&2;}

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

  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

[html] view plaincopy

  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下载地址:

[html] view plaincopy

  1. http://cgit.freedesktop.org/xorg/proto/xproto/
  2. configXproto.sh如下:

[html] view plaincopy

  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,下载地址为:

[html] view plaincopy

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

我所选的版本为:xtrans-1.2.5

交叉编译和上面的类似

[html] view plaincopy

  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下载地址:

[html] view plaincopy

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

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

[html] view plaincopy

  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,下载地址为:

[html] view plaincopy

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

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

[html] view plaincopy

  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,下载地址

[html] view plaincopy

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

libxcb-1.8.1交叉编译如下:

[html] view plaincopy

  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,下载地址:

[html] view plaincopy

  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,下载地址:

[html] view plaincopy

  1. ftp://xmlsoft.org/libxml2/
  2. 交叉编译和上面的类似
  3. xcb需要xcb-proto,下载地址:http://xcb.freedesktop.org/dist/
  4. xcb-proto-1.7交叉编译如下:
  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/xcbproto/ --host=arm-linux --target=arm-linux
  6. make && make install
  7. xcb需要libxau,下载地址:http://cgit.freedesktop.org/xorg/lib/libXau/
  8. libXau-1.0.7交叉编译:
  9. make clean && make distclean
  10. rm -rf configure
  11. ./autogen.sh
  12. 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"
  13. make && make instal

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

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

时间: 2024-11-02 23:29:26

交叉编译Mesa,X11lib,Qt opengl的相关文章

QT OpenGL中文教程在QT4版本后的错误代码更改(一)

由于教程中说的已经够可以了,这里就不对代码进行分析了,有兴趣可以自己去看看.这个教程来源于原来的NeHeOpenGL中文教程 (http://www.yakergong.net/nehe/) ,但其有不好的地方,就是我去看的时候,根本就下载不了代码~~~~可能我人品比较差吧.可以作为参考看一下. 所以选择了下面这个教程: 教程地址:QT OpenGL中文教程(http://www.qiliang.net/old/nehe_qt/index.html) 正在学习这个教程,但发现其时间过久: 根据Q

Qt OpenGL三维绘图

简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比如在X平台下的Motif,在Windows平台下的微软基本类库(MFC)——或是在这两种平台下都能使用的Qt. Qt的OpenGL模块使在Qt应用程序中使用OpenGL变的更加容易.它提供了一个OpenGL的部件类,这个部件类除了打开一个OpenGL显示缓冲,利用这个缓冲使用OpenGL应用编程接口来

ubuntu下配置qt+opengl+opencv

原地址:http://www.cnblogs.com/aleny-liu/archive/2011/12/16/aleny-Qtnote1.html http://blog.csdn.net/jdh99/article/details/6362660  1.首先安装Qt4并采用Qt Creator进行开发演示 (1)在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designe

QT+OpenGL 描绘简单图形

初学opengl,绕了很多弯路,继承于QOpenGLWindow,描画出来.新建类myopengl,头文件如下: #ifndef MYOPENGL_H #define MYOPENGL_H #include <QWidget> #include <QOpenGLWidget> #include <QOpenGLWindow> #include <QGLWidget> #include <QGLFunctions> #include <QOp

QT opengl多线程实现原理

QT里的qopenglwidget提供了对多线程的知识,根据文档所说,想要在另一个线程中执行渲染操作,需要将该widget的context通过movetothread到该线程,手动makecurrent和donecurrent,然后执行渲染操作.总而言之QT中想让opengl在另一个线程渲染,需要的东西只有一个:属于该线程的context.知道这个,就可以以很多方法实现该功能了. 方法1 qt的example里面有一个threadedopengl例子,里面就是通过aboutToCompose和f

QT+OpenGL(02)-- zlib库的编译

1.zlib库的下载 http://www.zlib.net/ zlib1211.zip 2.解压 3.进入  zlib1211\zlib-1.2.11\contrib\vstudio\vc14 目录 4.用VS打开zlibvc.sln文件 5.点击菜单"生成"->"生成解决方案" 已生成的zlibwapi.lib和zlibwapi.dll在目录zlib1211\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibDllRelea

QT+OpenGL(03)--libpng库的编译

1.zlib库的下载 http://www.zlib.net/ zlib1211.zip 2.libpng库的下载 https://libpng.sourceforge.io/index.html lpng1637.zip 3.解压zlib1211.zip与lpng1637.zip到同一个文件目录下 并重命名zlib1211.zip解压后的文件夹zlib-1.2.11为zlib 结果如下 4.修改lpng1637\projects\vstudio\zlib.props文件 将此两处修改为 fal

QT+OpenGL(04)&mdash;freetype库的编译

1.freetype库的下载 https://www.freetype.org/download.html freetype-2.10.0.tar.bz2 2.解压 3.进入  freetype-2.10.0\builds\windows\vc2010 目录 4.用VS打开freetype.sln文件 5.设置各项目的字符集为UTF-8 6.点击菜单"生成"->"生成解决方案" 编译后得到的lib库和dll文件在freetype-2.10.0\objs\x64

Linux下安装QT和OpenGL后QT无法使用OpenGL的解决方法

我的系统为Ubuntu14.04,用apt-get安装了实现了OpenGl的mesa,QT则是用官网下载的run文件来安装的. 好了,现在两个都分别有了,所以要在qt下尝试写OpenGl代码. 之前试过在Vim粘贴代码然后编译,经测试成功的是包含以下一条编译选项的语句. 1 gcc a.c -o a 但是直接将代码粘贴到qt creator上点击运行,却出现多条报错信息,各条调用函数都提示找不到,即是qt还未能连接使用安装了的OpenGL库. 网上查了很多解决方案都是在qt项目的.pro文件中添