您的位置:首页 > 其它

用ubuntu交叉编译静态的GTK库

2013-11-25 20:36 239 查看
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'

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

然后下载jhbuild.mingw.gtk-2.16.tgz.这是工程包,不到1M,它会自动下载依赖的包.
http://live.gnome.org/GTK+/Win32/CrossCompilingJhbuild?action=AttachFile&do=view&target=jhbuild.mingw.gtk-2.16.tgz
在http://live.gnome.org/GTK+/Win32/CrossCompilingJhbuild这个页面有提示的.应该不会过期的.

解压它.解压之后就按照网页的说明来操作就行了,

我看了下这里面的文件,其实也就是像configure.in,configure,makefile这样一些脚本文件,这些脚本描述依赖关系....

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"这个)

类似这样的代码:

<tarball id="pixman"
version="0.19.2">

<source
href="http://cairographics.org/releases/pixman-0.20.2.tar.gz"
md5sum="a923c20af88e469ac29ba42cfedb88c2"/>

<dependencies>

</dependencies>

</tarball>

以前我是从头编译的,编译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一样一个一个的替换嘛....

最麻烦的是补丁问题.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: