Ghostscript 中 ps2pdf 命令在 windows msys 下的运行错误问题。
前两天看到了 miloyip/game-programmer 这个项目觉得特别有用,真是好东西,明确了指出了学习路线,尤其是新手。不过打开看,有些书对应的亚马逊链接是无效的,比如《Tricks of the 3D Game Programming Gurus》等书的链接都是:https://www.amazon.com/dp// 这种无效链接,于是我就 fork 了一份把这些链接都补上了,提交了一个 pull request,就看作者什么时候能通过 merge 了,修改好我就尝试编译测试,由于是直接通过 make 生成,我 windows 本机已经安装了 msys,于是我就安装了 windows 版本的:Graphviz 2.38, Ghostscript 9.16 (ps2pdf), cpdf, 安装完后把可执行文件的目录添加到 PATH 系统环境变量,Ghostscript 需要把安装目录下的 bin, lib,都添加进去;ok 以后运行发现到最后总是 提示 ps2pdfwr: gs not found;翻阅了下本地 manual Ps2pdf.htm,其中写道:
All of these scripts actually call a script named ps2pdfwr or ps2pdfxx. The Unix ps2pdfwr script assumes that the Ghostscript executable is named gs; it is unlikely that you will need to change this. The DOS and MS Windows ps2pdfxx.bat script uses the value of the GSC environment variable, if defined, as the name of the executable; otherwise the script assumes the executable is named gswin32c. So in these environments, if the executable has a different name, you must set GSC to the name of the executable. |
即是说 ps2pdf 最终就是调用 ps2pdfwr 或者 ps2pdfxx,这两个脚本在 unix 下使用可执行文件:gs,不需要任何修改,但在 dos 和 windows 下 ps2pdfxx.bat 先使用 GSC 环境变量的值,如果未定义此环境变量则默认使用的可执行文件为 gswin32c,所以如果你安装的是64位话,可执行文件是 gswin64c.exe,所以需要添加名称 GSC 的环境变量,值为 gswin32c。
但是按照上述步骤操作后,依然提示同样错误,打开 ps2pdfxx 后,脚本为:
GS_EXECUTABLE=gs
gs="`dirname \"$0\"`/$GS_EXECUTABLE"
if test ! -x "$gs"; then
gs="$GS_EXECUTABLE"
fi
GS_EXECUTABLE="$gs" ... 省略 ... exec "$GS_EXECUTABLE" $OPTIONS -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%stderr "-sOutputFile=$outfile" $OPTIONS -c .setpdfwrite -f "$infile"
这里没有使用 GSC 环境变量,而是直接使用了 gs 作为可执行文件名称,外部修改 GS_EXECUTABLE 的值,或者设置成环境变量也没用,因为一开始就被修改成 "gs" 了,不过这个问题直接使用 cmd 命令行是没有问题的,只在 msys 命令行下有这个错误,于是我就直接加了个名为 gs 的 shell 脚本放到 lib 下,内容为:
gs="`dirname \"$0\"`/$GSC"
if test ! -x "$gs"; then
gs="$GSC"
fi
exec "$gs" "$@"
重新在 msys 命令行中 make 或者直接使用 ps2pdf 命令来测试,之前的 "gs not found" 的错误不见了,文档的整个编译生成过程顺利通过。
Ghostscript 中 ps2pdf 命令在 windows msys 下的运行错误问题。的更多相关文章
- 解决Windows 10下Wireshark运行问题
解决Windows 10下Wireshark运行问题在Windows 10下,安装Wireshark时候,提示WinPcap不被系统系统支持.这是由于最新版的WinPcap 4.1.3只支持到Wind ...
- windows 环境下通过运行快速启动程序
在windows环境下,我们可以使用一些系统内置的快捷键来快速启动我们想要的应用程序,我这里举例几个我经常使用的,比如: 快捷键 功能说明 services.msc 查看系统服务 gpedit.ms ...
- 解决Ubuntu中vi命令的编辑模式下不能正常使用方向键和退格键的问题
在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full,解决 ...
- Windows系统下安装运行Kafka
一.安装JAVA JDK 1.下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...
- wampserver - windows服务器下php运行环境配置
之前一直在通过windows server IIS跑php程序,直到后来,发现了她 “wampserver", 一个法国的windows+apache+php+mysql部署包. 感觉挺好用 ...
- 为cmd中的命令添加别名,以解决java:错误: 编码 GBK 的不可映射字符 (0xAF)
使用sublineText3编写了java代码,通过cmd javac编译 提示 错误:编码GBK的不可映射字符 解决方法 使用javac -encoding UTF-8 Person.java 结果 ...
- windows 环境下切换 python2 与 pythone3 以及常用命令
windows 环境下切换运行时的 python2 与 pythone3 当需要 python2 时执行:py -2 当需要 python3 时执行:py -3 windows下通过cmd切换pyth ...
- 代理server的理解(1):Windows环境下的代理server设置
浏览器中的代理server设置 Windows系统接口提供的代理server设置是一个全局的代理server的设置,如图所看到的,这里就不多解释: 各个浏览器在使用代理设置的时候,能够主动地获代替理设 ...
- Windows环境下制作MACOS X U盘安装盘
前两天在朋友的MAC BOOK AIR上胡乱操作时把原来安装好的双系统搞坏了,一不小心又把硬盘格式化了,导致MAC系统也没了,于是只能重新安装MACOS系统,并根据网友提供的教程,在MACOS安装OK ...
随机推荐
- 洛谷 P2800 又上锁妖塔
https://www.luogu.org/problem/show?pid=2800 题目背景 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩& ...
- Java应用调试利器——BTrace教程
http://www.jianshu.com/p/26f19095d396 背景 生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行时的数据信 ...
- 【比赛】STSRM 09
第一题 题意:n个点,每个点坐标pi属性ai,从右往左将遇到的点向左ai范围内的点消除,后继续扫描. 现可以在扫描开始前提前消除从右往左任意点,问最少消除数(提前+扫描). n,pi,ai<=1 ...
- Vue.js最佳实践(五招让你成为Vue.js大师)
对大部分人来说,掌握Vue.js基本的几个API后就已经能够正常地开发前端网站.但如果你想更加高效地使用Vue来开发,成为Vue.js大师,那下面我要传授的这五招你一定得认真学习一下了. 第一招:化繁 ...
- setTimeout()和setInterval()方法的区别
setTimeout(); //5秒后执行yourFunction(),只执行一次 setInterval(); //每隔5秒执行一次 1.setTimeout(funhander,time)的作用是 ...
- js函数定义方法
1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...
- PHP序列化、反序列化常用的魔术方法
__wakeup() //使用unserialize时触发__sleep() //使用serialize时触发__destruct() //对象被销毁时触发__call() //在对象上下文中调用不可 ...
- 利用Python 发送邮件
概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密,以及如何在邮件服务器之间传递.SMT ...
- device tree source file position
android/kernel/msm-4.9/arch/arm64/boot/dts/qcom/
- HDU 5129 Yong Zheng's Death
题目链接:HDU-5129 题目大意为给一堆字符串,问由任意两个字符串的前缀子串(注意断句)能组成多少种不同的字符串. 思路是先用总方案数减去重复的方案数. 考虑对于一个字符串S,如图,假设S1,S2 ...