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目录。