使用Visual Studio编译Geos

本文详细介绍了如何解决GEOS 3.5.0版本在使用CMake编译过程中遇到的问题,包括配置文件的替换及解决标准库冲突的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Geos是一个GIS领域做拓扑分析的库,目前最新的版本是3.5.0,详细的介绍参考 GeosTrac

在我编译该库的过程中发现官方提供的文件有一些问题,解决之后作个记录,方便日后编译的时候查阅:


Geos从3.5.0版本开始支持使用CMake的方式进行编译,但是目前提供的CMake.txt配置有一些问题,当使用CMake生成工程的时候出现以下错误:


解决的方案参考:

cannot build geos 3.5.0

需要下载两个文件:
1.CMakeLists.txt替换原来的CMakeLists.txt
2.GenerateSourceGroups.tx将该文件的后缀名修改为.cmake,并拷贝到geos-3.5.0\cmake\modules目录下
之后重新Configure一下并Generate生成工程,使用VS打开生成好的工程,如下图所示:


工程中geos用来编译动态库geos(生成goes.lib和geos.dll),geos-static生成的是静态的geos库(生成libgeos.lib),geos_c是生成C语言的库(geos_c.lib和geos_c.dll),可以根据自己的需求编译相应的库。
编译该解决方案,发现在编译geos工程的时候报错:


这是因为工程中某个文件引入了头文件 windows.h,导致windows.h中定义的max宏与c++标准库中的std::max冲突,具体出错的位置在BufferOp.cpp文件中的第89-92行。解决的方法很简单,在std::max中加上括号,不让它进行宏替换,而是调用std::max这个函数,也就是修改为:
//原始的文件
  double envMax = std::max(
    std::max(fabs(env->getMaxX()), fabs(env->getMinX())),
    std::max(fabs(env->getMaxY()), fabs(env->getMinY()))
  );
  
//修改之后:
  double envMax = (std::max)(
    (std::max)(fabs(env->getMaxX()), fabs(env->getMinX())),
    (std::max)(fabs(env->getMaxY()), fabs(env->getMinY()))
  );
修改之后重新编译一下即可。


附录:我把下载的文件上传到了资源共享中,可以从里面下载:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值