1、安装Fedora Live 13,
修改root用户登录,
修改selinux,
修改 /boot/grub/menu.lst 增加 vga=788 参数 保证 framebuffer 的正常
2、升级基本的开发环境
yum install xinetd telnet-server samba samba-common samba-client make gcc tftp-server patch gettext libtool gcc-c++ nfs-utils
说明:这个是经过试验最精简的可编译GTK+的环境了,这样有利于我们对依赖环境,及最小根文件系统进行分析
3、导入必要的环境变量
我一般用 root 用户登录,所以我修改了root用户的配置文件 vi /root/.bash_profile 增加如下环境变量
说明:
PATH 环境变量需要增加交叉编译目录的 bin 目录 因为后续编译会用到里面的命令
C_INCLUDE_PATH 的增加 是因为 在编译过程中有可能碰到 libjpeg.h 无法找到的问题
PKG_CONFIG_PATH 编译过程中 会去寻找相应的哭
LDFLAGS 和 CFLAGS 分别在编译和链接时会用到
LD_LIBRARY_PATH ./config 时会用到
export PREFIX=/myroot
export PATH=$PATH:$PREFIX/bin
export C_INCLUDE_PATH=$PREFIX/include
export LD_LIBRARY_PATH=$PREFIX/lib
export PKG_CONFIG_PATH=$LD_LIBRARY_PATH/pkgconfig
export LDFLAGS=-L$LD_LIBRARY_PATH
export CFLAGS=-I$PREFIX/include
4、建立独立的跟文件系统,便于以后进行交叉编译
mkdir /myroot
mkdir /myroot/man
mkdir /myroot/man/man1
后两个 man 目录是下面编译 jpeg 库时 make install 需要用到的,提前先建立好
5、下载编译 GTK 需要用到各个库(完全独立的编译,不依赖于系统环境),具体下载地址如下
一共 14个库,(这里除了 directFB 我必须使用特定版本外,其他我都使用目前最新的库2010.06.12)
按照依赖顺序排列如下:
1、zlib-1.2.5.tar.gz
2、libpng-1.4.2.tar.gz
3、jpegsrc.v6b.tar.gz
4、freetype-2.3.12.tar.gz
// 以上为编译DirectFB所必须
5、DirectFB-1.2.8.tar.gz
6、DirectFB-examples-1.2.0.tar.gz
// 以下为编译GTK 所必须
// 按照依赖关系编译步骤为
7、glib-2.24.0.tar.gz
8、atk-1.30.0.tar.gz
9、libxml2-2.7.7.tar.gz
10、fontconfig-2.8.0.tar.gz
11、pixman-0.18.2.tar.gz
12、cairo-1.8.10.tar.gz
13、pango-1.28.0.tar.gz
// 2.20.1 不稳定,会引起CORE DUMP
//14、gtk+-2.20.1.tar.gz
14、gtk+-2.10.14.tar.gz
下载地址如下:(均为官方下载地址,如果以后版本有更新,可根据URL地址分析后取得最新的代码下载地址)
ftp://xmlsoft.org/libxml2/libxml2-2.7.7.tar.gz
!!!+/2.20/gtk+-2.20.1.tar.gz 不要用了
ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.14.tar.gz
解压缩所有的 tar.gz 文件
for i in $(ls *.tar.gz);do tar -xvf $i;done
6、编译指导及遇到的问题
1)如果发现某些库或者头文件找不到,请参考最开始的环境变量设置,并且每个相应的模块编译完之后请 make install
2)对于jpeg库的编译,不但要 make install 而且要 make install-lib 否则会引起无法找到 jpeg 相关的头文件
3)编译DirectFb 遇到了 png_info 没有名为 trans_values 的成员,这是由于使用的 libpng 1.4 代码进行编译,而这个版本结构中的成员有调整,解决办法参考:
碰到问题:png_info 没有名为 trans_values的成员
DirectFB-1.2.8/interfaces/IdirectFBImageProvider_png.c
639行 修改 trans 为 trans_alpha
664行 修改 trans_values 为 trans_color
675行 修改 trans 为 trans_alpha
4)在使用最新的gtk+之前,我还试着编译过gtk+-2.10.14 遇到 G_GNUC_FUNCTION相关的报错,解决办法为
vimrc:
Cool, just use:
G_STRLOC instead of the G_GNUC_FUNCTION
sth like this:
Code:
WARN_UNIMPLEMENTED (G_STRLOC);
gtk+-2.10.14 的修改可以如下进行
cd gtk+-2.10.14/gdk/directfb
find . -name "*.c" -print0 | xargs -0 sed -i 's/G_GNUC_FUNCTION/G_STRLOC/g'
5)以上代码,一定要在linux 系统下编译,不要在 window 的共享目录编译,切记切记,否则当使用这些库德时候有可能出现:
elf file os abi invalid
6)pixman 这个库 是最新的环境才需要用到,其他一些编译过程没有相应的说明
7)完整编译过程可先参考:
:GTK_on_DirectFB_for_Embedded_Systems
7、开始编译喽
// 库编号为 1-7 的编译 没有特殊需要注意的地方,步骤类似
// 解压缩、进入目录、执行./configure、make、make install
// 例如:
tar -xvf zlib-1.2.5.tar.gz
cd zlib-1.2.5
// 这里注意2个地方
// 还记得前面设置的环境变量吗?为了以后能更好的交叉编译,我们设置了自己的根目录,所以 ./configure 带上了 prefix 参数
// make -j2 什么意思?我这里虚拟机设置为双核的,这样可以并行编译,这是make 命令的一个参数,可以使得编译速度快很多
./configure --prefix=$PREFIX;make -j2;make -j2 install
cd ..
// 编译DriectFb 之前,记得先修改 DriectFB 与 LibPng 1.4 不兼容的问题,参考上面的描述(或者遇到问题,按照上面的描述去解决)
ATK 的 编译
./configure --prefix=$PREFIX --disable-glibtest;make -j2;make -j2 install
LIBXML 的编译
./configure --prefix=$PREFIX --without-debug;make -j2;make -j2 install
FONTCONFIG 的编译
./configure --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --enable-libxml2;make -j2;make -j2 install
pixman 的编译 跟 1-7 的编译一样
CAIRO 的编译(这里要注意,参数跟指导文件的不大一样)
这里./configure 不能带上 --disable-pdf --disable-ps --disable-svg 这3个参数
否则这个版本呢的 GTK+ 无法编译通过
./configure --prefix=$PREFIX --enable-directfb=yes --without-x --disable-xlib --disable-xlib-xrender --disable-win32 --enable-png;make -j2;make -j2 install
编译 PANGO
./configure --prefix=$PREFIX --without-x;make -j2;make -j2 install
GTK+的编译
这里跟指导文件有差异 不能带上 --disable-modules
否则会导致 failed to load apple-red.png
./configure --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff --disable-glibtest --disable-largefile --with-included-loaders=jpeg,gif,png,xpm;make -j2;make -j2 install
大功告成,去测试一下编译出来的 gtk+吧
cd /myroot/bin
./gtk-demo
本文中用到的代码,全部采用automake 的方法
所以在./configure 的过程中 可以很容易的更改成 交叉编译环境
希望大家也能编出属于自己环境 的 GTK+
不过。。。。经过验证。。。很可惜,2.20.1 版本的 GTK+ 会 CORE DUMP
我要重新编译 gtk+-2.10.14 这个版本的 一切顺利
半自动化脚本,directfb 的修改 以及前面的准备工作请手工进行
cd zlib-1.2.5
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd libpng-1.4.2
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd jpeg-6b
./configure --prefix=$PREFIX
make -j2
make -j2 install
make install-lib
cd ..
cd freetype-2.3.12
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd DirectFB-1.2.8
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd DirectFB-examples-1.2.0
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd glib-2.24.0
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd atk-1.30.0
./configure --prefix=$PREFIX --disable-glibtest
make -j2
make -j2 install
cd ..
cd libxml2-2.7.7
./configure --prefix=$PREFIX --without-debug
make -j2
make -j2 install
cd ..
cd fontconfig-2.8.0
./configure --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --enable-libxml2
make -j2
make -j2 install
cd ..
cd pixman-0.18.2
./configure --prefix=$PREFIX
make -j2
make -j2 install
cd ..
cd cairo-1.8.10
./configure --prefix=$PREFIX --enable-directfb=yes --without-x --disable-xlib --disable-xlib-xrender --disable-win32 --enable-png
make -j2
make -j2 install
cd ..
cd pango-1.28.0
./configure --prefix=$PREFIX --without-x
make -j2
make -j2 install
cd ..
cd gtk+-2.10.14
cd gdk/directfb
find . -name "*.c" -print0 | xargs -0 sed -i 's/G_GNUC_FUNCTION/G_STRLOC/g'
cd ..
cd ..
./configure --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff --disable-glibtest --disable-largefile --with-included-loaders=jpeg,gif,png,xpm
make -j2
make -j2 install
cd ..