如何用MinGW编译Notepad++源码?编译时遇ATL头文件缺失问题
我之前编译Notepad++的时候也碰到过一模一样的问题!明明README说用MinGW就能编译,结果到atlbase.h这类ATL头文件这儿就卡壳了,折腾了好一阵才搞明白原因和解决办法,给你分享下:
为什么会出现这个问题?
ATL(Active Template Library)是微软Visual C套件专属的模板库,MinGW作为GNU工具链的Windows移植版本,默认根本不包含ATL的头文件和实现。Notepad的README标注用MinGW编译,是因为项目要么做了ATL的兼容适配,要么需要你安装额外的MinGW扩展组件——只是没写得太明确而已。
具体解决办法
这里有几个靠谱的方案,按优先级推荐:
方案一:用MSYS2安装MinGW的ATL扩展包
如果你用的是MSYS2环境(现在编译Windows开源项目大多推荐这个),直接通过包管理器安装适配MinGW-w64的ATL组件就行:- 64位环境:
pacman -S mingw-w64-x86_64-atl - 32位环境:
pacman -S mingw-w64-i686-atl
安装完成后,MinGW的include目录就会自动补上atlbase.h等所需文件,重新编译应该就能通过了。
- 64位环境:
方案二:用Notepad++源码自带的ATL兼容文件
仔细检查下Notepad++的源码目录,有些版本会在src或者专属的include子目录里,提供适配MinGW的ATL头文件副本。你只需要在编译时把这个目录添加到编译器的头文件搜索路径里就行,比如在Makefile里加一行:CXXFLAGS += -I./src/atl-compat(路径根据实际情况调整)。方案三:手动添加开源ATL实现
要是上面两个方案都不适用,可以找一些开源的MinGW兼容ATL实现,把对应的头文件和源码复制到MinGW的include和lib目录下,或者在编译脚本里指定这些文件的路径。
额外注意事项
- 确保你用的是MinGW-w64而不是旧版的MinGW,旧版MinGW对Windows平台的支持不完善,很多扩展组件都没有。
- 翻一翻Notepad++的Makefile或者编译脚本,说不定里面本来就有关于ATL路径的配置项,只是默认没开启,调整一下参数就能解决问题。
内容的提问来源于stack exchange,提问作者Денис Ковешников

