在scratchbox 環境下交叉編譯GTK

2021-04-20 22:51:58 字數 3446 閱讀 1125

最近因為工作原因開發

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成功了!

模擬交叉編譯環境scratchbox2的使用

本文介紹了在fedora系統環境下,使用sb2模擬arm開發板的交叉編譯環境。假設交叉編譯的工具鏈和gcc編譯器已經做成。1.獲取編譯工具scratchbox2安裝包 2.編譯安裝scratchbox2。前提 系統安裝了qemu,可執行 yum install qemu 安裝 將安裝包拷貝到任意目錄...

PYTHON在WINDOWS環境下的環境變數設定

1.首先需要在系統中註冊python環境變數 假設python的安裝路徑為c python2.5,開啟 我的電腦 屬性 高階 環境變數 系統變數 在path的值後面追加 c python25 記得加上 分號 與前面的值分隔開 上述環境變數設定成功之後,就可以在命令列直接使用python命令。或執行 ...

Armadillo 在Windows 環境下的配置

1 簡介 armadillo c library 是一種c 的線性代數庫 矩陣數學 以取得良好的平衡速度與易用性。整數,浮點,而複雜的數字支援,以及乙個子集,三角和統計功能。各種矩陣分解是通過 可選的整合 與lapack和atlas圖書館。延遲評價方法,基於模板元程式設計,使用 在編譯時 結合幾個行...