织梦CMS - 轻松建站从此开始!

罗索

交叉编译ghostscript

jackyhwei 发布于 2010-11-16 20:20 点击:次 
ghostscript是一个格式转换软件,可以将PostScript语言文件(.ps)及pdf文件转换成各种格式,本文为了实现在嵌入式系统中将上述文件转换为pbmraw文件供hp1020激光打印机使用,特研究了ghostscript软件在 arm-linux平台下的交叉编译。
TAG:

编译器:arm-linux-gcc 3.4.1

ghostscript是一个格式转换软件,可以将PostScript语言文件(.ps)及pdf文件转换成各种格式,本文为了实现在嵌入式系统中将上述文件转换为pbmraw文件供hp1020激光打印机使用,特研究了ghostscript软件在arm-linux平台下的交叉编译。

笔者一共下载了三个版本的ghostscript软件,分别为8.70、8.53、8.15,应该都可以通过交叉编译,但考虑到嵌入式系统资源有限,最终选择8.15版本,交叉编译后的gs程序为2.6MB(8.53为3.0MB,8.70更大)。

(一)交叉编译流程:
(1)解压ghostscript-8.15,改目录名称为ghostscript-8.15-x86,运行./configure后直接make,编译出x86版本

(2)解压ghostscript-8.15,运行./configure --host=arm-linux,然后执行make

(3)错误1:
./obj/echogs -w ./obj/devs.tr - -include ./obj/unix_
./obj/echogs: ./obj/echogs: cannot execute binary file

原因:编译ghostscript过程中需要使用三个中间应用程序,也被编译成arm-linux格式,主机不识别

解决方法:复制ghostscript-8.15-x86/obj目录下的echogs、genarch、genconf三个可执行程序到ghostscript-8.15/obj目录下

(4)错误2:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: skipping incompatible /usr/lib/libXt.so when searching for -lXt
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: cannot find -lXt
collect2: ld returned 1 exit status
make: *** [bin/gs] 错误 1

原因:x11相关的内容,可能arm-linux不支持

解决方法:修改ghostscript-8.15下Makefile文件,注释掉以下和x11相关内容
#DEVICE_DEVS=$(DISPLAY_DEV) $(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev

(5)至此顺利编译生成/bin/gs文件


(二)ghostscript在arm平台上的使用j

(1)运行./gs -h可以查看ghostscript帮助:
/ # ./gs -h
GPL Ghostscript 8.15 (2004-09-22)
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved.
Usage: gs [switches] [file1.ps file2.ps ...]
Most frequently used switches: (you can use # in place of =)
-dNOPAUSE           no pause after page   | -q       `quiet', fewer messages
-g<width>x<height> page size in pixels   | -r<res> pixels/inch resolution
-sDEVICE=<devname> select device         | -dBATCH exit after last file
-sOutputFile=<file> select output file: - for stdout, |command for pipe,
                                         embed %d or %ld for page #
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: bmpmono
Available devices:
   bbox bit bitcmyk bitrgb bj10e bj200 bjc600 bjc800 bmp16 bmp16m bmp256
   bmp32b bmpgray bmpmono bmpsep1 bmpsep8 cdeskjet cdj550 cdjcolor cdjmono
   cljet5 cljet5c deskjet devicen djet500 epswrite faxg3 faxg32d faxg4 ijs
   jpeg jpeggray laserjet lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d
   ljetplus nullpage pbm pbmraw pcx16 pcx24b pcx256 pcxcmyk pcxgray pcxmono
   pdfwrite pgm pgmraw pgnm pgnmraw pj pjxl pjxl300 pkm pkmraw pksm pksmraw
   png16 png16m png256 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw
   psdcmyk psdrgb psgray psmono psrgb pswrite pxlcolor pxlmono spotcmyk
   tiff12nc tiff24nc tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack
   uniprint xcf
Search path:
   . : /usr/local/share/ghostscript/8.15/lib :
   /usr/local/share/ghostscript/8.15/Resource :
   /usr/local/share/ghostscript/fonts
For more information, see /usr/local/share/ghostscript/8.15/doc/Use.htm.
Report bugs to
bug-gs@ghostscript.com, using the form in Bug-form.htm.

可见还需要lib、Resource和fonts目录,将ghostscript-8.15目录中的相应lib和Resource拷贝至对应位置。
至于fonts目录,可以先从主机的urs/local/share目录中拷贝过来。

(2)运行gs转换ps或pdf文件
./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r300x300 -sDEVICE=pbmraw -sOutputFile=test.pbm test.ps
我们需要使用gs将ps文件转换为pbmraw格式,命令如上,但是转换中提示错误:

/ # ./gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r300x300 -sDEVICE=pbmraw -sOutputFile=test2.pbm chess.ps
Error: /invalidfont in findfont
Operand stack:
   F1   12   Times-Roman   Font   Times-Roman   287289   Times-Roman   --nostringval--   Times-Roman   NimbusRomNo9L-Regu   Courier   NimbusMonL-Regu
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1   3   %oparray_pop   1   3   %oparray_pop   1   3   %oparray_pop   1   3   %oparray_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   3   4   %oparray_pop   4   4   %oparray_pop   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   7   5   %oparray_pop   --nostringval--   --nostringval--   --nostringval--   1   -1   1   --nostringval--   %for_neg_int_continue
Dictionary stack:
   --dict:1118/1686(ro)(G)--   --dict:0/20(G)--   --dict:75/200(L)--   --dict:31/70(L)--   --dict:17/17(ro)(G)--   --dict:1118/1686(ro)(G)--
Current allocation mode is local
Last OS error: 2
Current file position is 61042
GPL Ghostscript 8.15: Unrecoverable error, exit code 1

错误原因:/invalidfont in findfont,没找到相应的字体

解决方法:看来chess.ps这个文件需要Times-Roman字体,不用搜索了,系统中不叫这个名字,需要查看lib目录中的fontmap.gs文件
line170 /Times-Roman    /NimbusRomNo9L-Regu;
line122 /NimbusRomNo9L-Regu   (n021003l.pfb) ;

原来Times-Roman字体对应的文件是n021003l.pfb,刚刚复制的fonts目录肯定有这个文件,但是被分散在子目录中,将这个文件复制到fonts根目录即可。
pdf文件需要的字体可能还不一样,请自行尝试,gs附带的参数也可以修改。

(aokikyon)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201011/10480.html]
本文出处:百度博客 作者:aokikyon
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容