在scratchbox 环境下交叉编译GTK

来源:互联网 发布:汽车电脑调音软件 编辑:程序博客网 时间:2024/06/06 02:05
最近因为工作原因开发GTK等一系列的图形库,网上虽然有好多的开发gtk的文章,但是介绍在scratchbox上开发GTK的比较少,所以自己整理了一下开发过程,希望可以与别人分享。连两千多年前的孟子都说“独乐乐,不如众乐乐”,(读音读 dú yuè lè, bù rú zhòng yuè lè)。好了,废话少说,以下是我开发用到的版本。

scratch
scratchbox-core-1.0.10-i386.tar.gz
scratchbox-devkit-cputransp-1.0.7-i386.tar.gz
scratchbox-libs-1.0.10-i386.tar.gz
scratchbox-toolchain-arm-gcc3.4-uclibc0.9.28-1.0.4-i386.tar.gz
你可以到这里下载相应的开发工具包。
GTK 一系列的库和工具的版本,他们编译的顺序可参考vicegod的blog。有人会问了,为什么你的比vicegod文章里提到的库少呢,这是因为,我已经交叉编译出来了 Xserver了,我把它放在了我的scratchbox 建立的工程的/usr/X11R6下。缺少的库,包含在Xserer路径下的lib目录下。他们是fontconfig-2.1.0 ,freetype-6.3.6(啊!我也知道这很奇怪,到freetype的官方网站上去,最高版本也不过2.3.7,我的的确是Xserver-4.5.0编译出来的。可能是此freetype,非彼freetype吧。等以后有时间再慢慢研究。)
jpeg-6b
libpng-1.2.32
tiff-v3.4
zlib-1.2.3

libiconv-1.12
gettext-0.16
glib-2.4.0
atk-1.0.1
pango-1.4.0
gtk+-2.4.0

好了,前期的描述工作已经完成了,接下来就进入正题了。因为使用scratchbox,只有建立好工程,就可以像在为本机上编译程序一样,开始编译了。关于如何建立开发环境等可以参考scratchbox的官方网站的文档。
但是在编译过程中会遇到明明已经编译成功了,并且已经安装成功了编译所依赖的库,怎么configure 还是报错呢。要回答这个问题,看了这篇文章,应该对我们有所启示,而另一篇文章,则对我们调试configure的错误有所帮助。
所以在出现上述问题时,首先检查$PATH等环境变量,然后是/etc/ld.so.conf,接着可以尝试着把依赖库的pc文件所在目录增加到环境变量$PKG_CONFIG_PATH路径中。

所有的开发库编译都要经历 configure &make &make install 三个过程。只不过在configure 的时候会不同吧了!
以下是我在编译时的configure时的选项。

zlib-1.2.3
CC=arm-linux-gcc ./configure --shared  --includedir=/usr/local/include/
tiff-v3.4
CC=arm-linux-gcc ./configure --target=arm-linux
jpegsrc.v6b
CC=arm-linux-gcc ./configure --prefix=/usr/local --enable-shared --enable-static --target=arm-linux --host=arm-linux
libpng-1.2.32
CC=arm-linux-gcc ./configure --prefix=/usr/local --enable-shared --enable-static --target=arm-linux --host=arm-linux

libiconv-1.12
./configure --host=arm-linux --prefix=/usr/local
gettext-0.16
./configure --host=arm-linux --prefix=/usr/local
glib-2.4.0
./configure --host=arm-linux --cache-file=arm-linux.cache
这个比较特殊,因为编译的时候会发生以下错误
checking for growing stack pointer... configure: error: cannot run test program while cross compiling
解决办法见absurd的交叉编译场景分析之编译Glib
在编译glib(应该说是configure阶段)时还有如下错误:
checking for glib-genmarshal... no
configure: error: Could not find a glib-genmarshal in your PATH
后来查找是因为缺少命令glib-genmarshal,由于我的交叉编译环境是scratch box 所以将本机的glib-genmarshal拷贝到相应的搜索路径下就可以configure过了。不过在编译的时候还是会报错,找不到 glib-genmarshal 所在的路径,因为我们使用的是X86平台的程序。出现这个错误时,我们已经有了在 gobject 目录下有了glib-genmarshal文件了,将它拷贝到相应的搜索路径下,就可以工作了。
atk-1.0.1
./configure --host=arm-linux --prefix=/usr/local
pango-1.4.0
./configure --host=arm-linux --x-includes=/usr/X11R6/include/ --x-libraries=/usr/X11R6/lib/
gtk+-2.4.0
./configure --host=arm-linux --x-includes=/usr/X11R6/include/ --x-libraries=/usr/X11R6/lib/
当然现在在编译gtk的时候(编译阶段,就是make阶段)也出现了问题,
failed to load "./stock_add_16.png": Couldn't recognize the image file format for file './stock_add_16.png'
这个问题后来,我只是把/usr/loca/lib/pkgconfig 下的关于png的pc文件copy到/usr/lib/pkgconfig 下,然后再重新编译就过了。
可以正是一波未平,一波又起。
gtk+-2.4.0/gtk/.libs/lt-gtk-query-immodules-2.0: can't load library 'libgtk-x11-2.0.so.0'
这个错误原因是因为没有把动态库的路径加到/etc/ld.so.conf下,这样我只能手动的将相应的库copy到/etc/ld.so.conf所指定的路径上去。记得在编译GTK其它库的时候也遇到类似的情况,也都是采用相同的处理办法。
最后终于交叉编译GTK成功了!

http://blog.csdn.net/jiayinjia1983116/article/details/3095262
原创粉丝点击