Android 上移植 ghostscript-9.04 静态编译

一、说明

因为Android没有glib库,而gcc默认为动态编译,为了使程序能在开发板上运行,我们自己的C程序需要采用静态编译。

ghostscript的下载地址为http://downloads.ghostscript.com/public/。我用的是ghostscript-9.04

二、网上常见的方法

1.获取源代码

解压ghostscript-9.04.tar.gz ,并将解压后的ghostscript-9.04目录拷贝成ghostscript-9.04-pcghostscript-9.04-arm两分,分别用于编译PC主机上的gsarm-linux上的gs

命令:

#tarzxvf ghostscript-9.04.tar.gz

#cpghostscript-9.04 ghostscript-9.04-pc -R

#mvghostscript-9.04 ghostscript-9.04-arm


2.编译PC主机上的gs

命令:

#cdghostscript-9.04-pc/

#./configure

#make

这样就编译出了PC机上的gs,后面交叉编译时需要用到这一步编译出的中间文件,在./obj/aux/目录。


3.编译arm-linux上的gs

配置环境变量:

在环境变量PATH中添加交叉编译工具链的路径(arm-linux-gcc的路径)

命令:

#exportPATH=$PATH:/toolschain/4.5.1/bin

开始编译:

这里的./configure命令需要与PC主机上的不同。

命令:

#cd../ ghostscript-9.04-arm/

#./configure--host=arm-linux

#make

编译过程会出现下面的错误

出现错误:

./obj/aux/echogs-w ./obj/devs.tr - -include ./obj/unix_

./obj/aux/echogs:1: Syntax error: word unexpected (expecting ")")

make:*** [obj/devs.tr] 错误 2

出错原因:

编译过程需要一些中间文件(echogsgenarchgenconfmkromfs),这些文件在这里被编译成了arm-linux的,要在PC主机上运行者些文件是不行的,只好从ghostscript-9.04-pc/obj/aux/拷贝过来。

解决方法:

ghostscript-9.04-pc/obj/aux/的三个文件echogsgenarchgenconf拷贝到ghostscript-9.04-arm/obj/aux/

命令:

#cp../ghostscript-9.04-pc/obj/aux/echogs ./obj/aux/echogs

#cp../ghostscript-9.04-pc/obj/aux/genarch ./obj/aux/genarch

#cp../ghostscript-9.04-pc/obj/aux/genconf ./obj/aux/genconf

#make


出现错误:

./obj/aux/mkromfs:2: Syntax error: word unexpected (expecting ")")

make:*** [obj/gsromfs1_.c] 错误 2

解决方法:

ghostscript-9.04-pc/obj/aux/的文件mkromfs拷贝到ghostscript-9.04-arm/obj/aux/。注意,mkromfs需要更新修改时间, 否则它会被重新创建

命令:

#cp../ghostscript-9.04-pc/obj/aux/mkromfs ./obj/aux/mkromfs

#touch ./obj/aux/mkromfs

#make


编译完成,但是并没有静态编译,这样不能在Android下运行。主要是最后链接时没有使用-static

找到./base/unixlink.mak,这个文件最后一部分用于最后链接。

56

$(ECHOGS_XE)-a $(ldt_tr) -s - $(EXTRALIBS) $(STDLIBS)

改为

$(ECHOGS_XE)-a $(ldt_tr) -s - $(EXTRALIBS) $(STDLIBS) static

命令:

rmbin/gs

/bin/sh<./obj/ldt.tr

编译成功,可以下载到开发板上试试了


三、我对移植ghostscript-9.04过程的改进


#tarzxvf ghostscript-9.04.tar.gz

#cd ghostscript-9.04

#./configure--host=arm-linux

修改Makefile

320行:修改STDLIBS=-lpthread-lm STDLIBS=-lpthread -lm-static

387行:修改CCAUX=arm-linux-gccCCAUX=gcc

#make

比上步省事多了吧。


### 下载并编译 Ghostscript 9.25 针对 ARM 架构的版本 为了获取适用于 ARM 构架的 Ghostscript 版本 9.25,可以按照以下方式操作: #### 获取源码 首先需要从官方发布的资源中下载对应版本的源代码包。对于 Ghostscript 的具体版本号 `9.25` 可以访问其发布页面: ```bash wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs925/ghostscript-9.25.tar.gz tar -zxvf ghostscript-9.25.tar.gz cd ghostscript-9.25 ``` #### 准备交叉编译环境 在目标平台上构建适合 ARM 平台的应用程序通常需要用到交叉编译器。这里假设已经具备了支持 ARM-Linux-GNU-EABI 工具链。 设置好相应的环境变量以便于后续过程能够识别正确的工具路径以及主机类型定义。 ```bash export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export AR=arm-linux-gnueabihf-ar export RANLIB=arm-linux-gnueabihf-ranlib export STRIP=arm-linux-gnueabihf-strip export LD=arm-linux-gnueabihf-ld ``` #### 执行配置脚本 利用提供的 configure 脚本来调整生成规则使之适应新的硬件体系结构需求。 ```bash ./configure --host=arm-linux-gnu --prefix=/path/to/install/directory ``` 此命令会依据当前系统的状况自动生成 Makefile 文件以及其他必要的构建文件[^3]。 #### 开始编译流程 一旦所有的前期准备工作都已经完成,则可正式进入实际制造阶段。 ```bash make clean && make ``` 这一步骤可能耗时较长,请耐心等待直至结束为止。 #### 安装至指定位置 最后把制作好的二进制成果部署到预定的目标机器上去。 ```bash make install DESTDIR=/your/target/rootfs/path/ ``` 以上步骤完成后,在 `/your/target/rootfs/path/usr/local/bin/` 应该能找到名为 `gs` 的可执行档即为我们所需的 arm 版本 ghostscript 程序[^2]。 如果不想自己动手编译的话也可以考虑寻找现成预编译过的二进制档案来直接使用,不过需要注意确保来源可靠以免引入安全风险。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值