分类:
2012-08-29 11:30:02
原文地址:基于DirectFB的GTK+的交叉编译[转] 作者:vicegod
嵌入式GTK的安装
GTK的依赖库库很多,如果要交叉编译GTK则每一个依赖库都要编译一遍,这些库包括:zlib-1.2.3 ,libpng-1.2.10 ,tiff-3.8.2 ,libtool1.5.24 ,jpegsrc.v6b ,freetype-2.1.10 , libxml2-2.6.30 ,fontconfig-2.4.2 , DirectFB-1.1.0 , glib-2.12.10 , atk-1.20.0 , cairo-1.4.2 , pango-1.16.2 , gtk+-2.10.0
这些库的编译顺序按照上面的顺序安装。一般的安装过程为,
1. JPEG, PNG以及TIFF图形库
2. Freetype
3. Fontconfig
4. Glib库
5. ATK库
6. Cairo库
7. Pango库
8. GTK+库
注意这些库的版本要与GTK+ 要求的版本要一致。按照GTK+-2.10.0 的INSTALL文本的要求为Glib-2.12, Pango-1.1, ATK-1.9, Cairo-1.2
在编译这些库的源代码的时候最好写个build.sh文件,然后configure的时候直接运行这些build.sh文件就可以了。
我的pc机是Fedro2,我把交叉编译库安装在/opt/gui目录下,则各个build.sh的文件分别为,
1) Zlib-1.2.3
CC=powerpc-linux-pc ./configure --prefix=/opt/gui --shared –build=i686 –target=powerpc-linux –host=powerpc-linux
2) Libpng-1.2.10
echo ac_cv_fnuc_malloc_O_nonull=yes>>powerpc-linux.cache
CC=powerpc-linux-pc ./configure –cache-file=powerpc-linux.cache \
--prefix=/opt/gui --build=i686 –target=powerpc-linux –host=powerpc-linux \
“CFLAGS= ${CFLAGS} –I/opt/gui/include” \
“LIBS= -L/opt/gui/lib -lz”
3) Tiff-3.8.2
CC=powerpc-linux-pc ./configure --prefix=/opt/gui \
--enable-shared --build=i686 –target=powerpc-linux –host=powerpc-linux \
“CFLAGS= ${CFLAGS} –I/opt/gui/include” \
“LIBS= -L/opt/gui/lib –lz”
4) Libtool-1.5.24
CC=powerpc-linux-pc ./configure --prefix=/opt/gui \
--build=i686 –target=powerpc-linux –host=powerpc-linux
5) Jpegsrc.v6b
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –enable-shared –enable-static \
--enable-shared --build=i686 –target=powerpc-linux –host=powerpc-linux
在运行build.sh之后还需要修改Makefile文件中的LIBTOOL变量,把LIBTOOL=./libtool改为LIBTOOL=libtool,并且保证系统的libtool可执行程序在PATH路径中,因为在make的时候需要运行libtool
6) Freetype-2.1.10
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –build=i686 –target=powerpc-linux –host=powerpc-linux
7) Libxml2-1.6.30
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –build=i686 –target=powerpc-linux –host=powerpc-linux
编译fontconfig的时候需要libxml2这个库。
8) Fontconfig-2.4.2
export PKG_CONFIG_PATH=/opt/gui/lib/pkgconfig:$PKG_CONFIG_PATH
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –with-arch=powerpc –build=i686 –target=powerpc-linux –host=powerpc-linux –with-freetype-config=/opt/gui/bin/freetype-config
9) DirectFB-1.1.0
echo ac_cv_path_FREETYPE_CONFIG=/opt/gui/bin/freetype-config>>powerpc-linux.cache
echo ac_cv_path_LIBPNG_CONFIG=/opt/gui/bin/libpng-config>>powerpc-linux.cache
CC=powerpc-linux-pc ./configure –cache-file=powerpc-linux.cache --prefix=/opt/gui –build=i686 –target=powerpc-linux –host=powerpc-linux \
--disable-x11 –with-gfxdrivers=none –enable-png –enable-jpeg –enable-tiff –enable-zlib \
“CFLAGS= -I/opt/gui/include” “LIBS= -L/opt/gui/lib -ljpeg -ltiff -lz”
10) Glib-2.12.0
echo ac_cv_type_long_long=yes>>powerpc-linux.cache
echo glib_cv_stack_grows=no>>powerpc-linux.cache
echo glib_cv_uscore=no>>powerpc-linux.cache
echo ac_cv_func_posix_getwid_r=yes>>powerpc-linux.cache
echo glib_cv_monotonic_clock=yes>>powerpc-linux.cache
CC=powerpc-linux-pc ./configure –cache-file=powerpc-linux.cache --prefix=/opt/gui –build=i686 –target=powerpc-linux –host=powerpc-linux \
--enable-mem-pools
11) Atk-1.20.0
export PKG_CONFIG_PATH=/opt/gui/lib/pkgconfig:$PKG_CONFIG_PATH
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –diable-glibtest –build=i686 –target=powerpc-linux –host=powerpc-linux
12) Cairo-1.4.2
export PKG_CONFIG_PATH=/opt/gui/lib/pkgconfig:$PKG_CONFIG_PATH
CC=powerpc-linux-pc ./configure --prefix=/opt/gui –enable-directfb –enable-xlib=no –build=i686 –target=powerpc-linux –host=powerpc-linux
“LIBS= -L/opt/gui/lib -lz”
在编译Cairo时,修改configure文件中的参数PKGCONFIG_REQUIRES=”Requires::private”为PKGCONFIG_REQUIRES=”Requires”,这样生成的cairo-1.4.2/src目录下的cairo.pc文件中的requires就不会定义为Requires::private了,使得cairo的依赖库可以被后面的pango和其它源代码库的编译时使用了。
13) Pango-1.16.2
echo ac_cv_cairo_ft_scaled_font_lock_face=yes>>powerpc-linux.cache
echo ac_cv_lib_cairo_cairo_surface_write_to_png=yes>>powerpc-linux.cache
echo ac_cv_path_FREETYPE_CONFIG=/opt/gui/bin/freetype-config>>powerpc-linux.cache
echo ac_cv_have_x=no>>powerpc-linux.cache
echo ac_cv_lib_freetype_FT_Get_Next_Char=yes>>powerpc-linux.cache
export PKG_CONFIG_PATH=/opt/gui/lib/pkgconfig:$PKG_CONFIG_PATH
CC=powerpc-linux-pc ./configure –cache-file=powerpc-linux.cache --prefix=/opt/gui –with-arch=powerpc –build=i686 –target=powerpc-linux –host=powerpc-linux \
--enable-backend \
“CFLAGS= -I/opt/gui/include” “GLIBS= -L/opt/gui/lib”
14) Gtk+-2.10.0
echo ac_cv_path_GTK_UPDATE_ICON_CACHE=/usr/bin/gtk-update-icon-cache>>powerpc-linux.cache
echo ac_cv_path_GDK_PIXBUF_CSOURCE=/usr/bin/gtk-pixbuf-csource>>powerpc-linux.cache
export PKG_CONFIG_PATH=/opt/gui/lib/pkgconfig:$PKG_CONFIG_PATH
CC=powerpc-linux-pc ./configure –cache-file=powerpc-linux.cache --prefix=/opt/gui –build=i686 –target=powerpc-linux –host=powerpc-linux \
--enable-fbmanager –enable-debug=yes –with-gdktarget=directfb –without-x
“CFLAGS= -I/opt/gui/include” “LIBS= -L/opt/gui/lib -jpeg -ltiff -lz”
编译gtk时,修改configure文件中的参数PANGO_PACKAGES=”pango pangocairo”为PANGO_PACKAGES=”pango pangoft2 pangocairo ”,使得编译gtk的时候可以链接到库libpangoft2库。
编译gtk时,修改configure文件中的参数GLIB_GENMATSHAL=`$PKG_CONFIG variable=glib genmarshal glib-2.0`为GLIB_GENMATSHAL=/usr/local/bin/glib-genmarshal,使得编译gtk的时候可以运行pc上/usr/local/bin下的glib-genmarshal而不是交叉编译下的glib-genmarshal程序。
编译gtk时,修改文件gtk+-2.10.0/gtk/gtkiconthem.c文件中的builtin_icons为icon_theme_builtin_icons,在函数_gtk_icon_theme_ensure_builtin_cache()中,1151行处。
编译gtk时,修改configure文件中的
if test “x$CUPS_CONFIG” | = ”xno”; then
HAVE_CUPS_TRUE=
HAVE_CUPS_FALSE= ‘#’
else
HAVE_CUPS_TRUE= ‘#’
HAVE_CUPS_FALSE=
修改为
if test “x$CUPS_CONFIG” | = ”xno”; then
HAVE_CUPS_TRUE= ‘#’
HAVE_CUPS_FALSE=
else
HAVE_CUPS_TRUE=
HAVE_CUPS_FALSE= ‘#’
这样在make的时候就不会去编译cups的支持了,从而不去找cups/cups.h文件了。
在编译GTK的demo时候要链接到pc上的库,所以需要设置LD_LIBRARY_PATH=/usr/local/lib,这样在make的时候就可以通过了。
在编译gtk 时,注释掉/gdk/gdkalias.h文件中的
//extern __typeof(gdk_colormap_change) IA_gdk_colormap_change __attribute((visiblity(“hidden”)));
与gdkaliasdef.c文件中的
//#undef gdk_colormap_change
//extern __typeof(gdk_colormap_change)gdk_colormap_change __attribute((aliase(“IA_dk_colormap_change”) , visibility(“default”)))
注:在源代码编译的过程中,如果在configure的时候出现错误,首先查看环境变量的设置,再查看configure.log文件中出错的原因,分析出错的原因,或是因为依赖库的问题或其他的问题,作出相应的处理。另外,根据各个库中的.pc文件可以确定这个源代码库的编译过程中需要的其他库,然后用pkg-config看看所需要的库是否可以链接得到。