在這分享一下之前Build Gnash的經驗
因為我也是不斷的查資料和嘗試後,才Build出來的,當然要回饋一下。

不過,原本我是要build plugin的
只是沒想到build plugin需要用到gtk 或者 x linrary,可是我需要的是based on QT。
所以最後就只build出執行檔。 XD

希望有強者趕快修改Gnash 讓plugin可以base on QT,否則這可能就要變我的工作了 Orz


避免因為環境設定錯誤,所以先做了以下的環境設定

export CC=arm-linux-gnu-gcc
export CXX=arm-linux-gnu-g++
export AR=arm-linux-gnu-ar
export STRIP=arm-linux-gnu-strip
export RANLIB=arm-linux-gnu-ranlib
export LD=arm-linux-gnu-ld


giflib-4.1.6 ( update
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu --host=arm-linux-gnu --enable-shared
make;make install;

libtool-2.2.6a ( update )
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-shared
make; make install;

jpeg-6b ( update ) (須先安裝libtool)
先 copy 安裝好的config.sub和config.guess到jpeg-6b的資料夾下
( 我的安裝位置:=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/share/libtool/config/config.sub config.guess )
會這樣做是為了解決在make時會發生./libtool: command not found的錯誤。

./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-shared
make;make install;

sdl-1.2.13 ( update )
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-shared --enable-video-fbcon
--disable-video-x11 --disable-video-photon --disable-video-directfb --disable-video-ggi --disable-video-svga --disable-video-aalib --disable-video-qtopia --disable-video-dummy --disable-joystick --disable-alsa --disable-esd --disable-arts --disable-nasm --disable-dga
make;make install;

agg-2.5 ( update ) (須先安裝sdl)
修改Makefile.in.linux.SDL
AGGLIBS= -lagg -lSDL
AGGCXXFLAGS = -O3 -I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/SDL -L/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/lib
CXX = arm-linux-gnu-g++
C = arm-linux-gnu-gcc
#CXX = icc
LIB = arm-linux-gnu-ar cr

.PHONY : clean

修改 agg-2.5/src/Makefile 的第一行 改為 include ../Makefile.in.$(shell uname).SDL
make;

copy agg-2.5/include 下的所有東西到你要安裝的位置
( 我安裝的位置: /opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/agg )
copy agg-2.5/src/libagg.a 到你要安裝的位置
( 我安裝的位置: /opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-aspeed-linux-gnu/arm-aspeed-linux-gnu/lib )

boost-1.34.1 ( update )
$cd boost-1.34.1/tools/jam/src 
$sh ./build.sh
$cp bin.linuxx86/bjam ../../../ (複製bjam執行檔到boost-1.34.1下)
$export PATH=.:$PATH
$echo "using gcc : 3.242 : /opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/bin/arm-linux-gnu-g++ ;" > tools/build/v2/user-config.jam
$ bjam --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --toolset=gcc installcd tools/jam/src

libxml2-2.6.30 ( update )
修改 libxml2-2.6.30/testModule.c 加上<linux/limits.h>
(這是為了解決在make時發生的error : "PATH_MAX" undeclared)

   
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu
 make;make install;

glib-2.18.4 ( update )
新增一個armcach.sh,裡面放以下內容:
rm -f arm-linux.cache
echo glib_cv_long_long_format=ll>>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
    
修改glib/giounix.c 增加#include <bits/posix1_lim.h>
(這是為了解決error : "SSIZE_MAX" undeclared)

./armcache.sh
./configure --host=arm-linux-gnu --build=i686-linux CC=arm-linux-gnu-gcc RANLIB=arm-linux-gnu-ranlib LD=arm-linux-gnu-ld --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --cache-file=arm-linux.cache
make;make install;

gstreamer-0.10.23 ( update ) (須先安裝glib)
GLIB_CFLAGS="-I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include" GLIB_LIBS="-L/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/lib" 
PKG_CONFIG="/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/bin/pkg-config"
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu
make;make install;
*若你安裝的glib版本與我不同,且在make時發生g_xxx的error,請upgrade你的glib版本。

zlib-1.2.3 ( update )
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --shared
make;make install;

libpng-1.2.35 ( update )
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-shared
make;make install;

libcurl-7.19.4 ( update )
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-shared --without-ssl
make;make install;

gnash-0.8.5 ( update ) (須先安裝 zlib / libpng / libcurl)
修改endian.hpp 增加 defined(__arm__) 在little endian的地方(這裡要視你自己的arm去修改)。
(endian.hpp的位置: /opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/boost-1_34_1/boost/detail/endian.hpp)
(這樣做是為了解決make時發生的error: endian.hpp: choose platform)

CFLAGS="-I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/libxml2/ -I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/glib-2.0/ -I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/lib/glib-2.0/include/" 
CXXFLAGS="-I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/libxml2/ -I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/glib-2.0/ -I/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/lib/glib-2.0/include/" 
./configure --prefix=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/ --host=arm-linux-gnu --enable-gui=qt4,fb --with-agg-incl=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/include/agg --with-agg-lib=/opt/crosstool/gcc-3.4.2-glibc-2.3.3/arm-linux-gnu/arm-linux-gnu/lib
make; make install;


安裝完後,在bin資料夾下會有兩個執行檔 => gnash / fb-gnash

將這兩個執行檔copy到板子上,並修改權限。
執行: $./gnash

此時會發生一個error :
./gnash: 31: dirname: not found

只要修改gnash檔,就可以解決了,方法如下:

$vi gnash
找到 THIS_DIR=" ' dirname $0 ' "  修改成
THIS_DIR="."
再執行一次./gnash就會出現缺少library的訊息。
接下來就是依照訊息慢慢將你之前build出來的library copy到板子上即可。

gnash的source code裡有.swf檔可以copy到板子上run
$./gnash -v clip_as_button2.swf


不過雖然畫面跑的出來,但是滑鼠卻沒有反應,可是鍵盤卻可以操作。
還不知道癥結點在那,但是可以跑flash了 XD

arrow
arrow
    全站熱搜

    DelionDan 發表在 痞客邦 留言(4) 人氣()