VS2019编译GDAL 3.7.0遇bool宏重定义错误,求解决方案
GDAL 3.7.0编译错误解决思路
从GitHub下载GDAL 3.7.0源码,使用CMake配合VS2019完成配置,将生成包输出至gdal3.7.0-built文件夹,双击gdal.sln编译时出现如下错误:
20>18>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\include\xkeycheck.h(55,1): fatal error C1189: #error: The C++ Standard Library forbids macroizing the keyword "bool". Enable warning C4005 to find the forbidden define. 18>hdf5imagedataset.cpp 17>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\include\xkeycheck.h(53,1): warning C4005: 'bool': macro redefinition 17>C:\ProgramData\anaconda3\Library\include\stdbool.h(9): message : see previous definition of 'bool'
注:此问题为以下问题的后续:GDAL的CMake工具不接受PROJ 6.3.2,尽管要求版本≥6.0;完整错误输出可查看指定文档。
解决思路
- 排查Anaconda头文件干扰:错误显示
bool宏先在Anaconda的stdbool.h中定义,后被MSVC标准库重定义,说明CMake配置可能意外引入了Anaconda的头文件路径。- 检查CMake配置里的
INCLUDE_DIRECTORIES,移除C:\ProgramData\anaconda3\Library\include这类不必要的路径。 - 若需用Anaconda依赖,确保编译时优先加载MSVC标准库头文件,调整头文件包含顺序。
- 检查CMake配置里的
- 取消
bool宏定义:在编译配置中强制取消bool宏的定义。- 在CMakeLists.txt中添加
add_definitions(-Ubool),或在VS项目属性的“预处理器定义”里移除bool相关项,添加Ubool。
- 在CMakeLists.txt中添加
- 检查HDF5依赖配置:错误出现在
hdf5imagedataset.cpp,说明HDF5相关路径可能有问题。- 确认CMake中HDF5的路径未指向Anaconda版本,改用独立编译的HDF5库,避免头文件冲突。
- 启用C4005警告:按错误提示开启C4005警告,定位更多宏重定义问题,彻底排查冲突源。
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

