arm-linux-gcc编译gtk程序,【又7】Arm 版GTK编译
###### 轉(zhuǎn)自http://hi.baidu.com/wstone_h/item/b7fe9ac1f2ba7242a8ba94ec
## 交叉編譯gtk+dfb+arm手記
參考文獻(xiàn)1:2:3:4:1:2:這里主要參考了文獻(xiàn)1,雖然編譯后還有許多不足,但是交叉后的基本沒(méi)啥大問(wèn)題,哈哈。對(duì)于包的版本選擇,考慮了依賴(lài)的關(guān)系,所以對(duì)于依賴(lài)包選擇了最新的,不過(guò)在編譯gtk+時(shí),好像新版本有較大的改動(dòng),因此這里選擇了gtk+-2.12.9。文中有一個(gè)不足的地方就是安裝的路徑了,因?yàn)檫@個(gè)路徑是要加載到板子上的,所以要自行考慮。
包的下載地址:
1、tslib:tslib是cvs的版本,所以只能在網(wǎng)絡(luò)上找了
2、tiff : ftp://ftp.gtk.org/pub/gtk/v2.10/dependencies/tiff-3.7.4.tar.gz
3、jpegsrc.v6b :ftp://ftp.gtk.org/pub/gtk/v2.10/dependencies/
4、、glib-2.19.0 :ftp://ftp.gtk.org/pub/glib/2.19/
6、pango-1.20.2 :ftp://ftp.gtk.org/pub/pango/1.20/
7、、、、、、、、、、jpegsrc.v6b,libpng是圖像的包,如不需要,可以考慮不下載,下載時(shí)要注意哪些是必須的包,哪些不是必要的包
1、tslib 1.4
export PREFIX=/usr/gtkdfb
./autogen.sh
echo “ac_cv_func_malloc_0_nonnull=yes” >arm-linux.cache
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –cache-file=arm-linux.cache
make
make install
編譯完成后可以在目標(biāo)位置看到4個(gè)文件夾
2、glib-2.19.0
export LDFLAGS=-L$PREFIX/lib
export CFLAGS=”-g -I$PREFIX/include”
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
echo ac_cv_func_posix_getgrgid_r=yes>>arm-linux.cache
在網(wǎng)路上有些人是遇到4個(gè)錯(cuò)誤,可能本人比較特殊,呵呵。編譯多次,每次都是5個(gè)的,至于如何處理,請(qǐng)參考文獻(xiàn)3中對(duì)于glib的詳細(xì)分析,接著操作:
CC=arm-linux-gcc ./configure –host=arm-linux –build=i386-linux –prefix=$PREFIX –cache-file=arm-linux.cache
make
make install
交叉編譯成功后在目標(biāo)位置多出個(gè)/share文件夾
3、atk-1.24.0
CC=arm-linux-gcc ./configure –host=arm-linux –build=i386-linux –prefix=$PREFIX
make
make install
4、jpeg-6b
export CC=arm-linux-gcc
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
修改生成的Makefile文件:
# The name of your C compiler:
CC= gcc 該成CC=arm-linux-gcc (根據(jù)你自己交叉編譯器的位置修改)
# library (.a) file creation command
AR= ar rc 該成AR= arm-linux-ar rc (同上)
# second step in .a creation (use “touch” if not needed)
AR2= ranlib 該成AR2=arm-linux-ranlib (同上)
mkdir $PREFIX/man
mkdir $PREFIX/man/man1
make
make install
make install-lib
5、zlib-1.2.3
CC=arm-linux-gcc ./configure –prefix=$PREFIX -shared
make
make install
6、libpng-1.2.33
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
make
make install
7、expat-2.0.1
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
make
make install
8、freetype-2.3.7
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
make
make install
9、libxml2-2.6.31
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
make
make install
10、fontconfig-2.6.0
export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2
export LIBXML2_LIBS=”-L$PREFIX/lib -lxml2”
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –with-freetype-config=$PREFIX/bin/freetype-config –with-arch=arm
make
make install
11、tiff-3.7.4
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –enable-shared
make
make install
12、DirectFB-1.3.0
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –with-gfxdrivers=none –enable-png –enable-jpeg –enable-tiff –enable-zlib –enable-sdl=no –enable-gif=no –disable-x11
make
make install
13、pixman-0.12.0
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX
make
make install
14、cairo-1.8.4
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –without-x –disable-xlib –disable-xlib-xrender –enable-directfb –enable-freetype –disable-win32 –enable-pdf –enable-ps –disable-svg –enable-png
make
make install
15、pango-1.20.2
修改configure文件,將下面一些參數(shù)改成true
have_cairo=true
have_cairo_png=true
have_cairo_ps=true
have_cairo_pdf=true
have_cairo_freetype=true
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –enable-cairo –without-x
make
make install
16、gtk+-2.12.9
export LDFLAGS=”-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib”
export CPPFLAGS=”-I$PREFIX/include”
CC=arm-linux-gcc ./configure –host=arm-linux –prefix=$PREFIX –with-gdktarget=directfb –without-x –without-libtiff
make
make install
在./configure時(shí)可能會(huì)出現(xiàn)錯(cuò)誤,這是由于./configure的選項(xiàng)的原因,所以只要跟改下,以下僅是2中參考方案:
1、CC=arm-linux-gcc ./configure –host=arm-linux –build=i386-linux –prefix=$PREFIX –with-gdktarget=directfb –without-libtiff –disable-glibtest –disable-largefile –without-libpng
2、CC=arm-linux-gcc ./configure –host=arm-linux –build=i386-linux –prefix=$PREFIX –with-gdktarget=directfb –without-libtiff
在開(kāi)發(fā)板上運(yùn)行:
1、拷貝編譯后的文件(即/gtkdfb)到開(kāi)發(fā)板上
以上操作有個(gè)很重要的地方,那就是Directfb的目標(biāo)位置,這個(gè)將直接影響到使用,呵呵
由于我的目標(biāo)位置在 /usr/gtkdfb, 因此我要將文件掛載在相同的位置,這是因?yàn)镈irectfb使用時(shí)默認(rèn)查找的就是目標(biāo)位置,如果目標(biāo)位置沒(méi)有相關(guān)文件,就會(huì)報(bào)以下的錯(cuò)誤:
(!) DirectFB/core/system: No system found!
(#) DirectFBError [gdk_display_open: DirectFBCreate]: No (suitable) implementation found!
2、編寫(xiě)腳本
在運(yùn)行之前,還要做幾個(gè)腳本(保存成tslib.sh和gtkdbf.sh),腳本1用于開(kāi)發(fā)板上的tslib指定環(huán)境,腳本2用于pc環(huán)境編譯程序和開(kāi)發(fā)板的gtk環(huán)境。腳本1和腳本2要根據(jù)自己的情況修改,以下可能只適合我。腳本1的修改請(qǐng)參見(jiàn):http://hi.baidu.com/wstone%5Fh/blog/item/3e45ee247496a22cd407428e.html
腳本1:
#!/bin/bash
export TSLIB_ROOT=/usr/gtkdfb
export TSLIB_TSDEVICE=/dev/h3600_tsraw
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib
腳本2:
#!/bin/bash
export PREFIX=/usr/gtkdfb
export CFLAGS=”-g -I$PREFIX/include”
export LDFLAGS=-L$PREFIX/lib
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2
export LIBXML2_LIBS=”-L$PREFIX/lib -lxml2”
export LDFLAGS=”-L$PREFIX/lib -lts -Wl,-rpath,$PREFIX/lib”
export CPPFLAGS=”-I$PREFIX/include”
現(xiàn)在在開(kāi)發(fā)板上運(yùn)行腳本1后,就可以運(yùn)行/gtkdfb/bin/目錄下的ts_calibrate進(jìn)行tslib的校正
3、構(gòu)造2個(gè)文件:
這2個(gè)文件的位置在:
/usr/gtkdfb/etc/pango/pango.modules
/usr/gtkdfb/etc/gtk-2.0/gdk-pixbuf.loaders
使用以下方法構(gòu)造,不然運(yùn)行是會(huì)提示錯(cuò)誤:
pango-querymodules > $PREFIX/etc/pango/pango.modules
gdk-pixbuf-query-loaders > /usr/gtkdfb/etc/gtk-2.0/gdk-pixbuf.loaders
4、編寫(xiě)directfbrc
簡(jiǎn)易的directfbrc文件如下:
system=fbdev
fbdev=/dev/fb0
mode=240x320
depth=16
pixelformat=RGB16
保存成 .directfbrc(是隱藏文件,注意有個(gè)“點(diǎn)“) ,并保存到$HOME目錄下(直接cd,切換到的目錄即是$HOME目錄)
這里可以根據(jù)運(yùn)行后的警告和提示,或者自身對(duì)開(kāi)發(fā)板的了解情況進(jìn)行修改。
具體的可以參考:、解決字體問(wèn)題
當(dāng)沒(méi)有正確顯示字體,顯示是方框,這里是由于編譯時(shí)使用的是PC系統(tǒng)的字體庫(kù),當(dāng)我移植時(shí)卻沒(méi)有了字體庫(kù),也就是那種后綴是ttf的文件,所以要拷個(gè)字體庫(kù)到開(kāi)發(fā)板上。查看/gtkdfb/etc/fonts下的fonts.conf,使字庫(kù)和文件中描述的位置對(duì)應(yīng)上。可以看到如下內(nèi)容:
/usr/share/fonts就是我們的字體庫(kù)位置(pc的字庫(kù)也在/usr/share/fonts路徑下),從PC上拷字體庫(kù)到開(kāi)發(fā)板的該目錄下(/usr/share/fonts)
6、運(yùn)行g(shù)tk示例程序
在運(yùn)行腳本1和腳本2后,運(yùn)行/gtkdfb/bin/目錄下的gtk-demo,即gtk的示例程序。
在pc上編譯程序:
在pc上運(yùn)行腳本2以后:
arm-linux-gcc -o hello hello.c -lts -Wl,-rpath,$PREFIX/lib pkg-config gtk+-2.0 --cflags --libs
編譯后tslib已經(jīng)自動(dòng)包含在其中,呵呵。拷到開(kāi)發(fā)板即可運(yùn)行自己的hello了。
總結(jié)
以上是生活随笔為你收集整理的arm-linux-gcc编译gtk程序,【又7】Arm 版GTK编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在滴滴专车APP中认证成为滴滴专车司机的
- 下一篇: basler相机 ip linux,Li