交叉编译GTK+2.x和libX,交叉编译xserver,一直GTK和X(或DirectFB)到i.

2019-07-13 04:15发布

1. 概述

最近公司做一个项目,把一个老的设备的已经有的程序移植到新的嵌入式开发平台,我(lin)开始着手祥光工作,原来旧的平台是用的Ti 的CPU AM3530,跑嵌入式linux,内核版本:2.6.32(embedded linux,kernel 2.6.32),新的开发板当然也是跑嵌入式linux系统,CPU性能有所提高。所以要先交叉编译相关各个的库。就仪器上面相关的库很多,所用的框架比较老了:基本框架是GTK+2.0和DirectFB;下面我参看了网上两个博客,和自己亲自实践,就本次移植做个笔记,希望对大伙有所参考价值。

2. 平台:

条目 说明 build平台 Linux ubuntu 4.4.0,Ubuntu16.04,64Bit host平台 飞思卡尔 i.MX6 q4,Linux,32bit 交叉编译工具链 arm-phytec-linux-gnueabi-xx 其他工具 已经安装好各个x86平台的编译工具,bulild essential

3. 需要移植到imx6的linux平台的所有库的列表以及下载方法:

wget -c http://xmlsoft.org/sources/libxml2-2.6.32.tar.gz #00 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/inputproto-1.4.2.1.tar.bz2 #01 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/kbproto-1.0.3.tar.bz2 #02 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/bigreqsproto-1.0.2.tar.bz2 #03 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xproto-7.0.10.tar.bz2 #04 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xextproto-7.0.2.tar.bz2 #05 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xcmiscproto-1.1.2.tar.bz2 #06 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xf86bigfontproto-1.1.2.tar.bz2 #07 wget -c http://xorg.freedesktop.org/releases/X11R7.2/src/everything/xtrans-X11R7.2-1.0.3.tar.bz2 #08 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXau-1.0.3.tar.bz2 #09 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXdmcp-1.0.2.tar.bz2 #10 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/everything/util-macros-1.1.5.tar.bz2 #11 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/everything/libX11-1.1.3.tar.bz2 #12 wget -c ftp://ftp.tw.freebsd.org/pub/ FreeBSD/distfiles/xorg/lib/libX11-1.1.2.tar.bz2 #another 12 wget -c http://www.zlib.net/zlib-1.2.3.tar.bz2 #13 wget -c http://download.berlios.de/tslib/tslib-1.0.tar.bz2 #14 wget -c http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.bz2 #15 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/compositeproto-0.4.tar.bz2 #16 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/damageproto-1.1.0.tar.bz2 #17 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/fixesproto-4.0.tar.bz2 #18 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/recordproto-1.13.2.tar.bz2 #19 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/resourceproto-1.0.2.tar.bz2 #20 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/scrnsaverproto-1.1.0.tar.bz2 #21 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xineramaproto-1.1.2.tar.bz2 #22 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/videoproto-2.2.2.tar.bz2 #23 git clone git://git.freedesktop.org/git/xorg/proto/calibrateproto.git #24 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/fontsproto-2.0.2.tar.bz2 #25 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/fontcacheproto-0.1.2.tar.bz2 #26 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/randrproto-1.2.1.tar.bz2 #27 wget -c http://xorg.freedesktop.org/releases/X11R7.2/src/proto/renderproto-X11R7.0-0.9.2.tar.bz2 #28 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/renderproto-0.9.3.tar.bz2 #28 2rd wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xf86miscproto-0.9.2.tar.bz2 #29 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xf86vidmodeproto-2.2.2.tar.bz2 #30 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xf86dgaproto-2.0.3.tar.bz2 #31 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libxkbfile-1.0.4.tar.bz2 #32 git clone git://git.freedesktop.org/git/xorg/lib/libXCalibrate.git #33 wget -c http://xorg.freedesktop.org/releases/individual/lib/libXrender-0.9.2.tar.bz2 #34 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXrender-0.9.4.tar.bz2 #34 2nd wget -c http://xorg.freedesktop.org/releases/individual/lib/libXrandr-1.2.1.tar.bz2 #35 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXrandr-1.2.2.tar.bz2 #35 2nd wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libfontenc-1.0.4.tar.bz2 #36 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXfont-1.3.1.tar.bz2 #37 wget -c http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.3.0.0.tar.bz2 #38 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/xserver/xorg-server-1.4.tar.bz2 #38 2nd wget -c http://x.cybermirror.org/pub/individual/lib/libXext-1.0.3.tar.bz2 #39 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/everything/libXext-1.0.2.tar.bz2 #39 2nd wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/everything/libXi-1.1.3.tar.bz2 #40 wget -c http://x.cybermirror.org/pub/individual/lib/libXi-1.1.2.tar.bz2 #41 wget -c http://downloads.sourceforge.net/expat/expat-2.0.0.tar.gz #41 2nd wget -c ftp://ftp.vcu.edu/pub/gnu+linux/puppylinux/pupget_packages-1/expat-2.0.0.tar.gz wget -c ftp://ftp.linux.ee/pub/gentoo/distfiles/distfiles/fontconfig-2.4.2.tar.gz #42 wget -c http://www.ijg.org/files/jpegsrc.v6b.tar.gz #43 wget -c ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/fixesproto-4.0.tar.bz2 #51=18 wget -c ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.33.tar.bz2 #44 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libICE-1.0.4.tar.bz2 #45 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libSM-1.0.3.tar.bz2 #46 wget -c http://www.cairographics.org/releases/cairo-1.4.14.tar.gz #47 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXft-2.1.12.tar.bz2 #48 wget -c http://ftp.gnome.org/pub/gnome/sources/glib/2.14/glib-2.14.6.tar.bz2 #49 wget -c http://ftp.gnome.org/pub/gnome/sources/pango/1.18/pango-1.18.3.tar.bz2 #50 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXinerama-1.0.2.tar.bz2 #53 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/proto/xineramaproto-1.1.2.tar.bz2 #52=22 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXfixes-4.0.3.tar.bz2 #54 wget -c http://mirrors.rootmode.com/ftp.gnupg.org/libgpg-error/libgpg-error-1.0.tar.gz #55 wget -c ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.2.3.tar.gz #56 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXcomposite-0.4.0.tar.bz2 #57 wget -c http://ftp.gnome.org/pub/gnome/sources/atk/1.20/atk-1.20.0.tar.bz2 #58 wget -c http://xorg.freedesktop.org/releases/X11R7.2/src/lib/libXcursor-X11R7.2-1.1.8.tar.bz2 #59 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXcursor-1.1.9.tar.bz2 #59 2nd wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/lib/libXdamage-1.0.4.tar.bz2 #60 wget -c http://xorg.freedesktop.org/releases/individual/lib/libXdamage-1.1.1.tar.bz2 #61 wget -c http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-2.12.7.tar.bz2 #61 2nd wget -c http://ftp.gnome.org/pub/gnome/sources/gtk+/2.14/gtk+-2.14.4.tar.bz2 #61 wget -c ftp://ftp.gnome.org/mirror/gnome.org/sources/libglade/2.6/libglade-2.6.3.tar.gz #62 wget -c http://xorg.freedesktop.org/releases/X11R7.3/src/everything/xtrans-1.0.4.tar.bz2 文章下面有上面的各个tar源码包的连接的出处、以及上面的各个源码包的大集合下载网址,省略你下载的烦恼问题。

4. 参考资料和编译方法:

请参考下面两个网址编译:

(1). http://blog.csdn.net/linuxarmsummary/article/details/22326719 (2). https://forum.ubuntu.com.cn/viewtopic.php?f=97&p=1434090

编译前,请确保你已经安装好ubuntu的各个基本的编译库,和基本gcc环境,请认真按照两个博客的方法编译,特别是第一个博客的方法。

ubuntu 16.04 64bit系统安装32bit库以及编译环境:

我用的是ubuntu64位的系统,现在我们需要编译的是32位的gtk和x,所以必须要先让ubuntu支持32位的编译,下面是如何在ubuntu安装32位编译环境的步骤: 1 确认本机内核架构 dpkg --print-architecture 2 查看是否有多架构支持功能 dpkg --print-foreign-architectures 3 打开多架构支持功能 sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get -f dist-upgrade 4 安装32位库 sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 ./configure --

设定飞思卡尔的i.MX6的环境变量(下面以我的为例子,各个人的路径不一样)

一般厂家会在给你编译工具等资料的时候,给你一个设定imx6环境变量的脚本: source /opt/yogurt/i.MX6-PD15.3.0/environment-setup-cortexa9hf-vfp-neon-phytec-linux-gnueabi

5. 源码包下载

如果觉得安按照上面的下载太麻烦,六七十个库的源码,我这里有下载好的源码,下载地址:

http://download.csdn.net/download/mynameislinduan/9958349

6. 编译的注意事项和错误处理:

(1)在编译:cairo, pango, libX11, xorg-server的时候,非常非常容易出错

编译这几个库的时候,非常小心!同时因为版本比较旧,首先,确保按照第一个人的csdn博客的顺序编译;

(2)修改configure文件

第一个链接里面常常有修改configure的,认真按照里面的修改,注意: CFLAGS! LDFLAGS! 和 DEFAULT_DEFAULT_INCLUDE的修改,如果编译出错,多半是因为库文件和include头文件路径没加进去。

(3)PKG_CONFIG_PATH环境变量

PKG_CONFIG_PATH环境变量需要添加正确,必要时候,把你的编译好的库的preifix/lib 加入!

(4)PATH环境变量

PATH环境变量里面最好包含各个bin文件,lib,include文件的路径!否则,可能出现: unknow type name错误 或者 unreferrance 错误,原因是连接或者编译的时候,找不到头文件和库文件。

(5)耐心查看编译信息

当编译出错之后,需要耐心查看错在哪里?错在哪一行?
编译信息 Entering Directory xxx 和 Leaving Directory 会告诉你它们在那里编译出错的。

(6)libxml2编译

编译libxml2的时候,必须要指定zlib,就是要configure的时候–enable-zlib;

(7)xxx.PC文件的修改

出现错误,找不到库,找不到头文件都有可能因是 pkg_config文件的路径错误!
这个错误非常麻烦,需要修改之前的各个编译好的库的安装路径/lib/下的.PC
确定是不是由于x.pc文件的错误,参看编译器编译命令信息,如果出现路径重叠,多半是从这个错误!
修改方法:prefix=/xxxx/xx/xx/xx/x/xx/(你的编译器指定的sysroot路径)去掉修改成: prefix=/
然后在下面的:{libdir}{incdir}等写入对应的/usr/include或者/usr/lib
主要是看你的编译的sysroot路径,编译的时候,.pc文件会被修改,导致真正编译时候是这样的 : arm-xxxxxx-gcc -I/路径1sysroot/路径2编译器路径/usr/include,
这是由于sysroot和.pc文件里面的路径重叠,变成一个错误的路径,导致编译出错!
所以很多时候,每次编译一个库,都要修改对应的安装库路径下/lib/xxx库名.pc文件的路径!

(8)configure文件

配置的时候,我们可以加入头文件路径和LDFLAGS,CFLAGS环境变量,让编译依赖找到对于那个的库和对应的头文件。可以在configure的时候加入arm-linux.cache,具体参看第两个博客!
由于每个库源码编译方法可能存在不一样的顺序,未必个个都是简单的confiure 和 make,实在不行,可在configure的时候,加入多个-I/xxx, 和-L/xxx , make的时候可以指定configure有的变量,例如make CC=xxxx LDFLAGS=xxx

(9).编译错误

网上找到同样版本的文件替换。

7. 谢谢阅读