如何编译Fribidi for i586/ARM?

本文详细介绍了如何在i586的Ubuntu 14.04 32位系统及ARM环境中编译Fribidi。在i586环境下,无需额外设置,直接下载、解压并编译即可。而在ARM环境下,需使用交叉工具链,并确保其已正确设置在系统路径中。
最近在研究一些小语种,比如阿拉伯语Arabic,这些语言显示与其他语言,比如英语、中文、日文,韩文,在显示上有很大区别,它们都是基本都是从右向左显示,正好与常见的文字显示方式相反,另外如果在这些小语种语言里再夹杂一些数字,英文或符号,却又是从左向右显示,也就是说,这些语言显示是双向的,一开始以为全世界文字显示都是一个方向LTR,看到这些国家的语言后,才知道原来还有一种与我们通常认为的正好相反的显示方式。

为了处理这样的文字,有一套专门的算法,叫[UBA](http://www.unicode.org/reports/tr9/)(unicode bidirectional algorithm),有兴趣可以阅读这个算法。另外,针对这样的算法,还有一个专门的工具叫[fribidi](https://www.fribidi.org/),它是开源的,这个工具定义了一些函数接口,使用这些函数,就可以很方便的处理像Arabic这样从右向左RTL双向显示的文字。下面主要介绍下在i586环境和ARM环境下的编译与使用:

###i586环境
在ubuntu14.04 32bits机器上编译,一般ubuntu环境默认会支持gcc编译,以及包含Glib库,所以这里没有什么前提条件,下载解压后,按步骤操作就可以编译成功执行。
####下载
目前版本是fribidi-0.19.7.tar.bz2
####配置编译

jack@jxes-VirtualBox:~/samba_share/fnt$ tar xjf fribidi-0.19.7.tar.bz2 
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ ./configure --prefix=/home/jack/a //prefix指定安装目录,如果不指定,默认是安装到系统user/bin,或user/local/bin下的
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ make

编译成功后:

jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ ls
aclocal.m4  ChangeLog      config.h       configure     fribidi.pc     lib        Makefile.am  stamp-h1
ar-lib      ChangeLog.old  config.h.in    configure.ac  fribidi.pc.in  libtool    Makefile.in  test
AUTHORS     charset        config.log     COPYING       gen.tab        ltmain.sh  missing      test-driver
bin         compile        config.status  depcomp       INSTALL        m4         NEWS         THANKS
bootstrap   config.guess   config.sub     doc           install-sh     Makefile   README       TODO
//产生可执行文件fribidi
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ ls bin
fribidi              fribidi-bidi-types    fribidi-caprtl2utf8.c  fribidi-main.c.bak  getopt.c      gettext.h    SAMPLE.txt
fribidi-benchmark    fribidi-bidi-types.c  fribidi-caprtl2utf8.o  fribidi-main.o      getopt.h      Makefile     ts.txt
fribidi-benchmark.c  fribidi-bidi-types.o  fribidi-main-bak.c     getopt1.c           getopt_int.h  Makefile.am  ts_un.txt
fribidi-benchmark.o  fribidi-caprtl2utf8   fribidi-main.c         getopt1.o           getopt.o      Makefile.in
//产生so库
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ ls lib/.libs/
fribidi-arabic.o      fribidi-deprecated.o     fribidi-mem.o        fribidi-run.o    libfribidi.la   libfribidi.so.0
fribidi-bidi.o        fribidi-joining.o        fribidi-mirroring.o  fribidi-shape.o  libfribidi.lai  libfribidi.so.0.3.6
fribidi-bidi-types.o  fribidi-joining-types.o  fribidi.o            libfribidi.exp   libfribidi.so   libfribidi.ver
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ 

####测试
测试结果中的Gx:是添加的debug信息,可以忽略,一种是从文件中显示,一种是直接在控制台上显示,从控制的显示,我们发现Arabic的RTL的显示方式。

jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7$ cd bin
jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7/bin$ ./fribidi SAMPLE.txt 
G:fribidi
G2:GGGGGGGG
؟ﺪﻛﺄﺘﻣﺖﻧﺃ ﻞﻫG15:                                                      
G2:GGGGGGGG
G15:
G2:GGGGGGGG
ﺪﻛﺄﺘﻣﺖﻧﺃ ﻞﻫG15:                                                        
G2:GGGGGGGG
G15:
G2:GGGGGGGG
ءﺍﺮﺷ ﺔﻴﻠﻤﻋG15:                                                          
G2:GGGGGGGG
G15:
G2:GGGGGGGG
ﺔﻴﻠﻤﻌﻟﺍ ﻉﻮﻧ ﺮﺘﺧﺍG15:                                              
G2:GGGGGGGG
G15:
G2:GGGGGGGG
ءﺍﺮﺸﻟﺍ ﻎﻠﺒﻣG15:                                                        
G2:GGGGGGGG
G15:
G2:GGGGGGGG
ﻯﺪﻣ ﻢﻜﻣﺍﺪﺨﺘﺳﻻ ﺍﺮﻜﺷG15:                                          
G2:GGGGGGGG
G5:	G15:jack@jxes-VirtualBox:~/samba_share/fnt/fribidi-0.19.7/bin$ ./fribidi
G:fribidi
؟ﺪﻛﺄﺘﻣﺖﻧﺃ ﻞﻫG
G2:GGGGGGGG
G4:                                                                   Gﻫﻞ ﺃﻧﺖﻣﺘﺄﻛﺪ؟G15:

###ARM环境
####下载
fribidi-0.19.7.tar.bz2
####配置编译
编译过程与i586环境下基本一样,只是这里指定了交叉工具链host=arm-linux,需要注意的是交叉工具链要在系统环境变量里事先指定好。
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ echo $PATH
/home/jack/bin:/home/jack/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/home/jack/go/bin:/home/jack/tools/cortexA9/bin

jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ ./configure --prefix=/home/jack/b --host=arm-linux
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ make
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ ls
aclocal.m4  ChangeLog      config.h       configure     fribidi.pc     lib        Makefile.am  stamp-h1
ar-lib      ChangeLog.old  config.h.in    configure.ac  fribidi.pc.in  libtool    Makefile.in  test
AUTHORS     charset        config.log     COPYING       gen.tab        ltmain.sh  missing      test-driver
bin         compile        config.status  depcomp       INSTALL        m4         NEWS         THANKS
bootstrap   config.guess   config.sub     doc           install-sh     Makefile   README       TODO
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ ls lib/.libs/
fribidi-arabic.o      fribidi-deprecated.o     fribidi-mem.o        fribidi-run.o    libfribidi.la   libfribidi.so.0
fribidi-bidi.o        fribidi-joining.o        fribidi-mirroring.o  fribidi-shape.o  libfribidi.lai  libfribidi.so.0.3.6
fribidi-bidi-types.o  fribidi-joining-types.o  fribidi.o            libfribidi.exp   libfribidi.so   libfribidi.ver
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ 
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ ls bin
fribidi              fribidi-bidi-types    fribidi-caprtl2utf8.c  getopt1.c  getopt_int.h  Makefile.am
fribidi-benchmark    fribidi-bidi-types.c  fribidi-caprtl2utf8.o  getopt1.o  getopt.o      Makefile.in
fribidi-benchmark.c  fribidi-bidi-types.o  fribidi-main.c         getopt.c   gettext.h
fribidi-benchmark.o  fribidi-caprtl2utf8   fribidi-main.o         getopt.h   Makefile
jack@jxes-VirtualBox:~/samba_share/fnt/am/fribidi-0.19.7$ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JXES智能生态系统

如文章对你有用,请作者喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值