歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 用Ubuntu交叉編譯靜態的GTK庫

用Ubuntu交叉編譯靜態的GTK庫

日期:2017/2/28 16:16:15   编辑:Linux教程

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一樣一個一個的替換嘛....
最麻煩的是補丁問題.....

Copyright © Linux教程網 All Rights Reserved