16、交叉编译gtk+

16、交叉编译gtk+

目标平台:LOONGSON-1B开发板

内核:Linux 3.0

编译平台:ubuntu10.04

交叉工具链:gcc-3.4.6-2f

 

、简介

 GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。 

 

二、下载gtk源码包

    进入http://ftp.gnome.org/pub/gnome/sources/gtk+/下载一个的gtk稳定版本源码包,这里选择gtk+-2.16.0.tar.gz。

 

三、交叉编译gtk步骤

(说明:由于编译的ubuntu系统环境已经安装了pango、atk、png、jpeg...库等等,在gtk执行./configure的时候会自动地去链接安装在/usr/local/lib/目录下的pango、atk、png、jpeg...库,而非交叉编译生成的/home/tool/gtk/****_install/目录下的pango、atk、png、jpeg...库,尝试配置环境变量仍无法解决。因此这里configure生成的Makefile指向链接编译的库文件路径,需要修改为交叉编译的库文件,其他编译步骤与配置与通常交叉编译gtk基本一致。)

1、拷贝文件

把前面所有交叉编译gtk依赖库和x11依赖库,安装生成的所有****_install/目录下文件,分别全部拷贝到install_gtkx11/目录下:

#mkdir /home/tool/install_gtkx11/

#cp gtk/atk_install/* /home/tool/install_gtkx11/ -arf

......

#cp gtk/****_install/* /home/tool/install_gtkx11/ -arf

......

#cp x11/xtranx_install/* /home/tool/install_gtkx11/ -arf

......

#cp x11/****_install/* /home/tool/install_gtkx11/ -arf

2、配置环境变量(必须,否则可能导致链接库出错):

#export PREFIX=/home/tool/install_gtkx11

#export LDFLAGS="-L$PREFIX/lib -Wl,-rpath,$PFEFIX/lib"

#export CPPFLAGS="-I$PREFIX/include"

#export BASE_DEPENDENCIES_LIBS="-L/home/tool/install_gtkx11/lib -lpangocairo-1.0 -lpango-1.0 -lpangoft2-1.0 -lpangox-1.0 -lpangoxft-1.0 -lcairo -ljpeg -lpng12 -latk-1.0 -ldirectfb -ldirect -lfusion -lfontconfig -lfreetype -lz -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lltdl -lxml2 -lpixman-1 -lX11 -lXrender -lXau -lxcb -lXft -lXext -lrt -lm"

#export BASE_DEPENDENCIES_CFLAGS="-I/home/tool/install_gtkx86/include"

3、配置gtk:

#tar zxf gtk+-2.16.0.tar.gz

#cd gtk+-2.16.0

生成mipsel-linux.cache文件:

#echo gio_can_sniff>mipsel-linux.cache

这一步是为了避免configure的时候出现:

checking for gio can sniff... Configure:error:in '/home/tool/gtk/gtk+-2.16.0':

configure: error: cannot run test program while cross compiling

这个错误。

配置(配置过程中出现错误可参考config.log解决):

./configure --prefix=/home/tool/gtk/gtk_install/ --host=mipsel-linux --disable-debug --disable-cups --with-gdktarget=x11 --with-x --enable-xkb --enable-xinerama --without-libtiff --without-libjasper --disable-glibtest  CPPFLAGS='-I/home/tool/install_gtkx11/include/pango-1.0/ -I/home/tool/install_gtkx11/include/cairo -I/home/tool/install_gtkx11/include/pixman-1/ -I/home/tool/install_gtkx11/include/libpng12 -I/home/tool/install_gtkx11/include/directfb/ -I/home/tool/install_gtkx11/include/libxml2 -I/home/tool/install_gtkx11/include/atk-1.0/ -I/home/tool/install_gtkx11/include'  LIBS='-L/home/tool/install_gtkx11/lib/ -lpango-1.0 -lpangocairo-1.0 -lpangox-1.0 -lpangoxft-1.0 -lpangoft2-1.0 -lglib-2.0 -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lgio-2.0 -ljpeg -lcairo -lz -lpixman-1 -lpng12 -ldirectfb -ldirect -lfusion -lfontconfig -lfreetype -lxml2 -latk-1.0 -lX11 -lxcb -lXrender -lXau -lXft -lXext -lXdamage -lXfixes -lXcursor -lXcomposite -lXrandr -lXinerama -lrt -lm'  BASE_DEPENDENCIES_LIBS="-Wl,-rpath /home/tool/install_gtkx11/lib -lpangocairo-1.0 -lpango-1.0 -lpangox-1.0 -lpangoxft-1.0 -lcairo -ljpeg -lpng12 -lpangoft2-1.0 -latk-1.0 -ldirectfb -ldirect -lfusion -lfontconfig -lfreetype -lz -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lltdl -lxml2 -lpixman-1 -lX11 -lxcb -lXrender -lXau -lXft -lXext -lXdamage -lXfixes -lXcursor -lXcomposite -lXrandr -lXinerama -lrt -lm"  BASE_DEPENDENCIES_CFLAGS="-I/home/tool/install_gtkx11/include/" --cache-file=mipsel-linux.cache

路径:/home/tool/install_gtkx11/是所有gtk依赖库和X11相关库交叉编译生成目录文件的汇总。

说明:

由于在configure过程中,pango的动态库一直链接不正确导致configure退出,这里将该检测pango错误退出的动作屏蔽:

#vi configure

查找语句"Can't link to Pango. Pango is required to build",将语句后的退出语句"{{(exit 1); exit 1;}};"屏蔽(注意大括号的个数)。

使之完成configure并生成Makefile,后再通过修改Makefile使之链接正确的pango库和其他相关依赖库的文件路径。即相应地,把Makefile链接的库文件路径指定为-L/home/tool/install_gtkx11/目录下。

如Makefile里有这样一句:

GTK_DEP_LIBS= -pthread -lpangocairo-1.0 -lpango-1.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lfontconfig -lXext -lXrender -lXinerama -lXrandr -lXcursor -lXcomposite -lXdamage -lcairo -lX11 -lm

则修改为:

GTK_DEP_LIBS= -pthread -L/home/tool/install_gtkx11/lib -lpangocairo-1.0 -lpango-1.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lfontconfig -lXext -lXrender -lXinerama -lXrandr -lXcursor -lXcomposite -lXdamage -lcairo -lX11 -lm

类似地,其他语句指定的库没链接到交叉编译install_gtkx11目录的,按上面方法修改即可。

(备注:gtk依赖库本身没生成librt和libm,这两个库是从编译器拷到/home/tool/install_gtkx11/lib下的)

#make && make install

出现问题:

gtkscalebutton.c:错误:conflicting types for ‘gtk_scale_button_set_orientation’

问题分析:

是由于gtk/gtkscalebutton.c在声明函数前调用了该函数产生错误,将void gtk_scale_button_set_orientation(GtkScaleButton *button, GtkOrientation orientation);在调用前声明即可。

编译安装成功后在--prefix指定的目录下生成bin、etc、include、shared和lib目录。

你可能感兴趣的:(linux,ubuntu,移植,gtk+,交叉编译)