vs2010 c#+GDAL (64位)编译配置

前期准备:

Win7(64位)、VS2010、gdal-1.10.1、swigwin-2.0.4。

1、下载

下载gdal-1.10.1(GDAL下载地址http://trac.osgeo.org/gdal/wiki/DownloadSource),安装目录
D:\gdal-1.10.1。

下载swigwin-2.0.4(下载地址https://sourceforge.net/projects/swig/files/swigwin),安装目录
D:\swigwin- 2.0.4。(注意是下载Swigwin文件而不是源代码)

 

2、修改

(1)VS2010:打开 生成——配置管理器——修改活动解决方案平台为X64。

(2)gdal-1.10.1

打开D:\gdal-1.10.1\nmake.opt

修改54行: GDAL_HOME = “D:\GDAL”。(编译生成文件的保存路径)

       83行: SWIG = D:\swigwin-2.0.4\swig.exe(必须是swigwin.exe的完整路径)。

      153行: “#WIN64=YES”,去掉#。注意保存。

      675行:”SYM_PREFIX=_”,去掉最后面的下划线。

 

打开D:\gdal-1.10.1\makefile.vc,修改23~26行,将“_”改为$(SYM_PREFIX)。如图:

 

打开D:\1.10.1\swig\csharp\AssemblyInfo.cs文件,将94行代码注释掉,解决安全透明代码无法调用的问题。

 

打开 D:\1.10.1\swig\csharp\gdal\GdalPINVOKE.cs

         D:\1.10.1\swig\csharp\ogr\OgrPINVOKE.cs

         D:\1.10.1\swig\csharp\osr\OsrPINVOKE.cs 

             修改188~193行:将重复的代码注释掉,解决接口重定义的问题。

 

打开D:\1.10.1\swig\csharp\gdal\Band.cs|Dataset.cs|Driver.cs,修改第17行,解决接口成员名错误问题。

 public Band(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Band_SWIGUpcast(cPtr), cMemoryOwn, parent)

 public Dataset(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Dataset_SWIGUpcast(cPtr), cMemoryOwn, parent)

 public Driver(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Driver_SWIGUpcast(cPtr), cMemoryOwn, parent) {

 

3、编译

开始—所有程序—Microsoft Visual Studio 2010—Visual Studio Tools—Visual Studio x64兼容工具命令提示(2010)

打开命令行工具,cd d:\gdal-1.10.1

然后执行 nmake /f makefile.vc

                nmake /f makefile.vc install

                nmake /f makfile.vc devinstall

注:编译可能要费一些时间,不要着急。

以上是完成了C++的编译,要再进入csharp编译。

执行         cd swig\csharp

                nmake /f makefile.vc

            (运行这一步有问题的话,加以下两句:namke /f makefile.vc clear 、nmake /f makefile.vc interface)

                nmake /f makefile.vc install

正常情况下可以编译成功。

 

再打开VS2010项目,将D:\GDAL里编译好的.dll文件(共9个,D:\GDAL\bin\gdal110.dll和D:\GDAL\csharp下的8个.dll)加入到VS2010的项目bin\x64\Debug下,然后在vs中添加引用。

 

注意:因为我们使用的是64位系统,所以将.dll文件复制到bin\Debug下是不对的,会在调用”Gdal.AllRegiste();”时出现异常:“OSGeo.GDAL.GdalPINVOKE”的类型初始值设定项引发异常。

解决方法:将.dll文件复制到VS2010项目的bin\x64\Debug目录下。

 

 

参考:http://www.cnblogs.com/yeahgis/archive/2013/04/10/3011553.html

http://www.cnblogs.com/yhlx125/p/3550957.html

http://blog.csdn.net/u010771437/article/details/41477333

 

 

 

转载自:https://blog.csdn.net/zhangying_496/article/details/51258862

You may also like...