您的位置:首页 > 编程语言 > C#

GDAL2.1 C#编译

2016-07-12 23:19 253 查看
    之前一直在做windows下32位系统的软件开发工作,现在要将软件运行在64位的windows操作系统中,遇到了很多问题,整理了一下:

1.Windows下GDAL的C#编译

   (1)下载gdal1111.zip(或者gdal-1.11.1.tar.gz)源码。下载地址:http://download.osgeo.org/gdal/1.11.1/,下载解压后放在本地。

    (2)不同的gdal对应的swigwin的版本不同,打开解压后的gdal-1.11.1\swig\csharp\gdal目录下的GdalPINVOKE.cs文件,在文件开头找到对应的swig版本,我下载的是swigwin-2.0.7版本,下载地址:http://sourceforge.net/projects/swig/files/swigwin/,下载解压后放在本地。

    (3)修改nmake.opt文件

      默认生成的gdal路径,可以根据需要修改

      GDAL_HOME =C:\warmerda\bld

       设置swig的文件路径,nmake.opt文件中为:

      SWIG =swig.exe

      修改为下载的swigwin-2.0.7绝对文件名,例如:

      SWIG=D:\GDAL\swigwin-2.0.7\swig.exe

      在文件中找到

      #WIN64=YES

      去掉#,修改为:

      WIN64=YES

2.编译C#可用的GDAL

      (1)GDAL编译

      启动VS2010命令行x64工具,转到解压的gdal-1.11.1的目录下,依次运行下面的命令: 

      nmake /f makefile.vc

      nmake /f makefile.vc install

      nmake /f makefile.vc devinstall

      编译成功后,在gdal-1.11.1的目录下生成了gdal1111.dll、gdal_i_lib库文件,还不能直接被C#调用。

    (2)C#调用GDAL编译

      转到解压的gdal-1.11.1的目录下,依次运行下面的命令:

      nmake /f makefile.vc
interface

      nmake /f makefile.vc

      nmake /f makefile.vc install

      在设置的GDAL_HOME目录下出现内含8个dll的csharp文件夹,将其copy到gdal111.dll相同目录下,C#引用gdal_csharp.dll、gdalconst_csharp、ogr_csharp和osr_csharp即可。

3.报错处理

     在C#调用GDAL编译时会出现几个错误,具体如下:

    (1)接口重复定义
osr\OsrPINVOKE.cs(192,10): error CS0111:
类型“OSGeo.OSR.OsrPINVOKE”已定义了一个名为“OsrPINVOKE”的具有相同参数类型的成员
osr\OsrPINVOKE.cs(188,10): (与前一个错误相关的符号位置)
NMAKE : fatal error U1077: “C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.EXE”: 返回代码“0x1”


     

       在gdal-1.11.1\swig\csharp路径中gdal、ogr和osr三个目录中找到GdalPINVOKE.cs、OgrPINVOKE.cs、OsrPINVOKE.cs三个文件中分别找到GdalPINVOKE()、OgrPINVOKE()、OsrPINVOKE()三个静态函数,每个文件都有两个函数,注释掉其中一个就行。

 

  (2)接口成员名称错误

gdal\Band.cs(17,79): error CS0117: “OSGeo.GDAL.GdalPINVOKE”并不包含“BandUpcast”的定义 gdal\Dataset.cs(17,82): error CS0117: “OSGeo.GDAL.GdalPINVOKE”并不包含“DatasetUpcast”的定义 gdal\Driver.cs(17,81): error CS0117: “OSGeo.GDAL.GdalPINVOKE”并不包含“DriverUpcast”的定义 NMAKE : fatal error U1077: “C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.EXE”: 返回代码“0x1”


      

       在gdal-1.11.1\swig\csharp\gdal目录中找到Band.cs、Dataset.cs和Driver.cs三个文件,在三个函数Band()、Dataset()和Driver()继承的基类中找到GdalPINVOKE.BandUpcast,GdalPINVOKE.DatasetUpcast和GdalPINVOKE.DriverUpcast分别改为GdalPINVOKE.Band_SWIGUpcast,GdalPINVOKE.Dataset_SWIGUpcast和GdalPINVOKE.Driver_SWIGUpcast即可通过编译生成GDAL
C#文件。

注意:我编译以后。C#调用老提示“安全透明方法“OSGeo.GDAL.Gdal.AllRegister()”,C#编译应该设置这样:nmake
/f makefile.vc  MSVC_VER=1700  

思路基本差不多。有需要的。联系QQ:757624760

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: