linux交叉编译静态,用Ubuntu交叉编译静态的GTK库

本文介绍使用Ubuntu进行GTK2.16的交叉编译过程,通过jhbuild工具简化依赖管理和编译步骤,解决编译过程中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GTK这个工程很大,编译起来很不方便,特别是静态编译.

在Windows下用Mingw和msys编译死慢死慢.(用bash.exe进行configure太慢了,还时不时跳个错误出来..)

所以我用Ubuntu交叉编译.configure相当的快.

jhbuild本为gnome这个庞大工程而生,编译GTK这方面也许只有它最方便了.用jhbuild的好处是不用自己来处理GTK的依赖关系了,编译可以一气呵成.

我编译的是GTK 2.16,我按这个页面的提示进行编译:http://live.gnome.org/GTK+/Win32/CrossCompilingJhbuild

GTK3都出来了怎么还编译2.16呢,其实3还不稳定,2.16是最稳定版本.而且跨平台编译的工程包只有2.16的.

我的系统是Ubuntu 11.04,编译安装在$home下.

首先安装mingw,可以直接安装:

sudo apt-get install mingw32

系统会自动处理依赖关系,自动下载另外两个包:mingw32-binutils  mingw32-runtime

然后安装jhbuild,其实系统也自带这个源,可以直接

sudo apt-get install jhbuild

注意它的网页上提醒是源码安装,会很麻烦的.

然后运行jhbuild,提示没有 $home/.jhbuildrc这个文件,新建一个就行,这个文件可以只有两行,主要是用来配置的.

checkoutroot = os.path.expanduser('~/checkout/gnome')

prefix = '/home/ww/gtkout'

#这是我自己设置的目录,这个文件其实也没有什么用

tar xzf jhbuild.mingw.gtk-2.16.tgz

cd jhbuild.mingw.gtk-2.16

./cross-build-gtk-rls

它会自动下载zlib,png,glib,cairo,xml2,jpeg,iconv,pixman,atk,freetype,tiff,gtk等等.

很方便,比我以前自己乱编译好多了.

注意了zlib,gettext,和gtk-io都有补丁的!我想这也是我以前编译不成功的关键,(以前编译GTK库时压根没有在意补丁)

看一下gtk+-win32.jhbuildrc这个文件,就会发现有很多是disable的,如:--disable-gtk-doc

所以编译起来很快,编译用时仅仅十来分钟.(但是排错用了很久)

它用wget下载,这种下载很慢,其实也可以单独下载,看gtk+-win32.moduleset这个文件

找好版本号一个一个的下载,再把文件放到jhbuild.mingw.gtk-2.16/checkout.rls下就行了.注意版本一定要一样

GTK 2.16确实老了!

在下载过程中它会到zlib.net下载zlib 1.2.5.这个页面好像被墙了或者已经over了,下载不了.百度吧!

在下载过程中它还会下载pixman 0.19.2但是这个好像是废弃版本,下载页面已经把它给删了.不过可以用高版本代替.

直接复制pixman这个包还不行,因为配置文件带有md5验证(防止下载时出错的)

下载pixman 0.20.2(百度).再用系统自带的命令得到md5:

md5sum pixman-0.20.2

然后到$home/jhbuild.mingw.gtk-2.16/gtk+-win32.moduleset改md5值和文件名,(最好不要改version="0.19.2"这个)

类似这样的代码:

以前我是从头编译的,编译freetype,fontconfig,gettext,glib,cairo,pango.....

编译进程中还要注意环境变量还要设置 pkg-config路径和要一些麻烦的错误.一个编译不成功就不可能进行下一个.

单是理清它的依赖关系就头晕了......

所以用jhbuild还是很方便的.jhbuild本为gnome而生,编译GTK这方面也许只有它最方便了

如果以上编译成功了,就说明没有什么错误了.....(我编译过程中最后的demo没有完成)

现在看看怎么静态编译.

看看gtk+-win32.jhbuildrc

这个文件里面有这样一句:

autogenargs += ' --disable-static '

也就是它只编译动态库,改下就行了:

autogenargs += ' --enable-static --disable-shared'

但是编译会出错!要把GTK工程清理了重头编译才行(反正我编译过程中出错了...)

编译很顺利,但是到了GTK+也就是最后工程卡住了.....

glib,cairo,pango都成功了...就是GTK卡住了,说没有找到pango......

以后再考虑吧..

我现在在想可不可以替换gtk+-win32.moduleset这个文件里的内容,来编译GTK3!像替换pixman一样一个一个的替换嘛....

最麻烦的是补丁问题.....0b1331709591d260c1c78e86d0c51c18.png

交叉编译libx加GTK+2.1时候用到各个文件的集合,不用花费时间网上一个一个下载,已经经过本人亲测试实测,还可以编译GTK+directFB 1.1 libs_for_gtk Dir: atk-1.25.2.tar.gz atk-1.26.0.tar.gz bigreqsproto-1.1.2.tar.bz2 cairo-1.8.6.tar.gz CPAN-1.94.tar.gz DirectFB-1.1.1.tar.gz expat-2.0.1.tar.gz expat-2.1.0.tar.gz ExtUtils-MakeMaker-6.20.tar.gz fontconfig-2.4.2.tar.gz fontconfig-2.6.0.tar.gz fontconfig-2.7.3.tar.gz freetype-2.3.5.tar.bz2 freetype-doc-2.3.6.tar.bz2 glib-2.12.1.tar.bz2 glib-2.14.4.tar.gz glib-2.18.2.tar.bz2 glibc-2.2.5.tar.bz2 gtk+-2.10.14.tar.bz2 gtk+-2.10.7.tar.bz2 gtk+-2.12.12.tar.bz2 inputproto-2.2.tar.bz2 jpegsrc.v6b.rar jpegsrc.v6b.tar.gz kbproto-1.0.6.tar.bz2 libpng-1.2.10.tar.bz2 libpng-1.2.32.tar.lzma libpthread-stubs_0.1.orig.tar.gz libtool-1.5.22.tar.gz libtool-2.4.2.tar.xz libX11-1.0.3.tar.bz2 libX11-1.2.2.tar.bz2 libX11-1.3.2.tar.gz libX11-1.5.0.tar.bz2 libXau-1.0.7.tar.bz2 libXau-1.0.8.tar.bz2 libxcb-1.3.tar.bz2 libxcb-1.4.tar.bz2 libxcb-1.8.1.tar.bz2 libXdmcp-1.0.3.tar.gz libXdmcp-1.1.2.tar.bz2 libXext-1.0.1.tar.bz2 libXfont-1.4.4.tar.bz2 libXft-2.1.12.tar.bz2 libXft-2.1.13.tar.bz2 libxml2-2.6.30.tar.gz libxml2-2.6.32.tar.gz libxslt-1.1.29.tar.gz libXt-1.0.6.tar.bz2 pango-1.16.4.tar.bz2 pango-1.18.2.tar.gz pango-1.22.1.tar.bz2 pango-1.24.4.tar.bz2 pixman-0.24.0.tar.bz2 poky-pinky-3.1.1.tgz stubs-soft.h tiff-3.8.2.tar.gz tiff-4.0.7.tar.gz tslib-1.4.tar.gz xcb-proto-1.7.1.tar.bz2 xcmiscproto-1.1.2.tar.bz2 xcmiscproto-1.2.2.tar.bz2 xextproto-7.2.1.tar.bz2 xorg-server-1.3.0.0.tar.bz2 xorg-server-1.4.2.tar.bz2 xproto-7.0.23.tar.bz2 xtrans-1.2.7.tar.bz2 zlib-1.2.3.rar zlib-1.2.3.tar.gz zlib-1.2.5.tar.gz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值