Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102729
  • 博文数量: 35
  • 博客积分: 637
  • 博客等级: 上士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-15 17:22
文章分类

全部博文(35)

文章存档

2015年(6)

2014年(1)

2013年(3)

2012年(25)

我的朋友

分类:

2012-08-29 11:30:02

嵌入式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_iconsicon_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文件了。

在编译GTKdemo时候要链接到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看看所需要的库是否可以链接得到。

阅读(995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~