前期准备:
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