如何在Visual C++中静态编译Ghostscript?需修改msvc.mak哪些内容?
嘿,我来一步步帮你搞定在Visual C++环境下静态编译Ghostscript的操作,还有msvc.mak文件的关键修改点——这些都是我实际折腾过的经验,靠谱得很:
在Visual C++中静态编译Ghostscript的完整步骤
前期准备
- 先确保你装了带C++工具链的Visual Studio,还有拿到Ghostscript的稳定版源码包(建议选9.x系列,新版配置可能有变动)
- 打开对应架构的VS命令提示符(比如要编译64位就选「x64 Native Tools Command Prompt for VS」),然后切换到Ghostscript源码的根目录
对msvc.mak文件的核心修改
这部分是静态编译的关键,一定要改对:
- 切换CRT链接模式:找到文件里的
LINKFLAGS配置行,把动态链接的/MD改成静态链接的/MT;如果是编译Debug版本,就改成/MTd。比如原来的代码:
改成:LINKFLAGS = /nologo /MDLINKFLAGS = /nologo /MT - 禁用动态库构建:找到定义
BUILD_SHARED的地方,把它的值从1改成0,直接注释掉也行——这会告诉编译脚本不要生成动态dll,只做静态库 - 指定静态依赖库:检查
LIBS部分的依赖项,把所有动态版的依赖库(比如zlib.lib)换成对应的静态版本(比如zlibstatic.lib),确保所有依赖都用静态链接 - 移除导出符号宏:找到
GS_EXPORT这类导出相关的宏定义,把它改成空值。比如原来的#define GS_EXPORT __declspec(dllexport),改成#define GS_EXPORT——静态编译不需要导出符号,留着反而会出问题
执行编译
- 在VS命令提示符里,直接运行:
要是想编译Debug版本,就加个参数:nmake -f msvc.maknmake -f msvc.mak DEBUG=1 - 等编译跑完,成功的话会在
obj或bin目录下生成静态链接的gs.lib,还有不需要依赖dll的可执行文件(比如gswin64c.exe)
小提醒
- 如果编译时碰到依赖缺失的错误,先确认zlib、libpng这些自带的子依赖已经用静态模式编译好了,或者在msvc.mak里指定了正确的静态库路径
- 可以把生成的可执行文件单独拷到空文件夹里运行,要是能正常启动,就说明静态编译成功了(动态版的话会提示缺dll)
内容的提问来源于stack exchange,提问作者Jesús Inclán Blanco
相关产品推荐
相关产品推荐

