Fedora下 DriectFB 开发手记(3)

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地址分析后取得最新的代码下载地址)


?use_mirror=nchc

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);

参考:(wip)/5/?wap2

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 ..

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpygz.html