VS2015编译GEOS

时间:2019-08-23
本文章向大家介绍VS2015编译GEOS,主要包括VS2015编译GEOS使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

下载链接:http://trac.osgeo.org/geos/

1. 打开cmake,加载geos源码和定位geos的工程存放位置;

2.点击configure,会报错,首先设置CMAKE_INSTALL-PREFIX定位到geos源码文件目录

3.然后打开链接https://trac.osgeo.org/geos/browser/trunk/cmake/modules

下载GenerateSourceGroups.cmake文件。

4.将下载后的文件放到使用的cmake3.11.0中,我使用cmake的文件路径为G:\OSGCore\Bulid\cmake-3.11.0-win64-x64,则将刚才下载的文件拷贝到G:\OSGCore\Bulid\cmake-3.11.0-win64-x64\share\cmake-3.11.0\Modules文件下。然后点击configure,不报错了,点击generate,生成编译工程文件,然后打开vs2010工程文件,点击批生成。
Setting GEOS version 3.5.1 as port of JTS 1.13.0
Setting GEOS C API version 1.9.1
Setting Visual Studio 2005+ option /MP to ON
Setting GEOS compilation with small functions inlining - ON
Generating GEOS E:/Geos/geos_3_5_build/include/geos/platform.h
Generating GEOS E:/Geos/geos_3_5_build/include/geos/version.h
Generating GEOS E:/Geos/geos_3_5_build/capi/geos_c.h
Enable GEOS Unit Tests build - ON
Enable GEOS XML Tester build - ON
Enable GEOS large geometry tests build - ON
CMake 3.12.0-rc1 successfully configured GEOS using Visual Studio 14 2015 Win64 generator
Configuring done
Generating done

然后点击生成

编译GEOS 64bit, 第一次批生成可能会有两个工程失败,分别是geos_unit和xmltester,所以可以先编译这两个工程,方法是右键工程名-设置为启动项,然后生成以后就会报错,geos_unit工程的报错是sqrt函数重载的问题,修改方法是在参数前面加上(double),就可以识别出具体调用的哪个sqrt函数了;

xmltester工程的报错是round函数找不到标识,修改方法是在该cpp中添加头文件#include <geos/util/math.h>

,在round函数前面加上名字空间util::, 只做这一步,虽然暂时可以消除错误,但是在进行编译时出现:

error LNK2019: 无法解析的外部符号 "double __cdecl

geos::util::java_math_round(double)" (?java_math_round@util@geos@@YANN@Z),该符号在函数 "double __cdecl geos::util::round(double)"

(?round@util@geos@@YANN@Z) 中被引用

这时需要把\geos-3.5.1\src\util文件夹下的math.cpp粘贴到\geos-3.5.1\tests\xmltester文件夹下,并且把math.cpp添加到工程xmltester里面就可以了;然后批生成就行了。

5. 编译后需要转移以下文件到G:\OSGCore\Bulid\OpenSceneGraphic\3rdParty\下的对应位置:(第一个是将geos源码目录下的include文件夹下的geos文件夹拷贝到G:\OSGCore\Bulid\OpenSceneGraphic\3rdParty\include文件夹中,第二个是将编译工程文件夹下的include文件下的geos里面的两个.h文件拷贝到前面的G: \OSGCore\Bulid\OpenSceneGraphic\3rdParty\include\geos中,将编译后生成的lib文件拷贝到G:\OSGCore\Bulid\OpenSceneGraphic\3rdParty\lib下,将编译后生成的dll拷贝到G:\OSGCore\Bulid\OpenSceneGraphic\3rdParty\bin下)。如果找到的两个dll文件名称相同,则将debug下的dll的文件的名称后加上d(文件可以在geos编译的工程文件里面找)拷贝结束后的文件夹目录结构:



参考:https://www.jianshu.com/p/c2561fd78958

原文地址:https://www.cnblogs.com/herd/p/11399393.html