VS2010编译32/64位GDAL 2.1.3

1、 下载源码

下载GDAL源码gdal213.zip,解压。建议解压两次,分别重命名文件夹为gdal-2.1.3-32和gdal-2.1.3-64,以便不同的文件夹编译不同的版本,防止混乱。

 

2、 编译xerces

Ø  下载xerces-c-3.1.4源码,解压c盘根目录。

Ø  打开C:\xerces-c-3.1.4\projects\Win32\VC10\xerces-all\xerces-all.sln编译生成32位和64位release版的lib与dll,分别在C:\xerces-c-3.1.4\Build\Win32\VC10\Release与C:\xerces-c-3.1.4\Build\Win64\VC10\Release路径下。

 

3、 安装ArcSDE的SDK

解压ArcSDE10SDK.iso,安装ArcSDE10SDK的32位版本和64位版本,本例分别对应安装在C:\ArcGIS\arcsde32与C:\ArcGIS\arcsde64路径。

 

4、 nmake.opt修改

Ø  32位执行执行如下步骤

1)  搜索定位“MSVC_VER=1500”,改为“MSVC_VER=1600”

2)  搜索定位“GDAL_HOME”,建议改为“GDAL_HOME = "C:\warmerda\bld32"”以示区分。

3)  搜索定位“XERCES_DIR”,删除“#”符号反注释,设置相关路径,与步骤2对应:

XERCES_DIR=        C:\xerces-c-3.1.4

XERCES_INCLUDE= -I$(XERCES_DIR)/src -I$(XERCES_DIR)/src/xercesc

XERCES_LIB = $(XERCES_DIR)/Build/Win32/VC10/Release/xerces-c_3.lib

4)  搜索定位“SDE_ENABLED”,删除“#”符号反注释,设置路径和文件名,与步骤3对应:

SDE_ENABLED= YES

SDE_VERSION=100

SDE_PLUGIN= YES

SDE_SDK= C:\ArcGIS\arcsde32

SDE_INC= $(SDE_SDK)\include

SDE_LIB= $(SDE_SDK)\lib\pe.lib \

          $(SDE_SDK)\lib\sde.lib $(SDE_SDK)\lib\sg.lib

 

Ø  对于64位执行如下步骤

1)  搜索定位“MSVC_VER=1500”,改为“MSVC_VER=1600”。

2)  搜索定位“GDAL_HOME”,建议改为“GDAL_HOME ="C:\warmerda\bld64"”以示区分。

3)  搜索定位“SYM_PREFIX=_”,将其改为“SYM_PREFIX=”。

4)  搜索定位“#WIN64=YES”,改为“WIN64=YES”。

5)  搜索定位“XERCES_DIR”,删除“#”符号反注释,设置相关路径,与步骤2对应,如下:

XERCES_DIR=        C:\xerces-c-3.1.4

XERCES_INCLUDE= -I$(XERCES_DIR)/src -I$(XERCES_DIR)/src/xercesc

XERCES_LIB= $(XERCES_DIR)/Build/Win64/VC10/Release/xerces-c_3.lib

5)  搜索定位“SDE_ENABLED”,删除“#”符号反注释,设置路径和文件名,与步骤3对应:

SDE_ENABLED= YES

SDE_VERSION=100

SDE_PLUGIN= YES

SDE_SDK= C:\ArcGIS\arcsde64

SDE_INC= $(SDE_SDK)\include

SDE_LIB= $(SDE_SDK)\lib\pe.lib \

          $(SDE_SDK)\lib\sde.lib$(SDE_SDK)\lib\sg.lib

 

5、 makefile.vc修改(只针对64位)

找到如下语句:

!IF$(MSVC_VER) < 1500

VB6_SAFEARRAYSYM=        /INCLUDE:_vbSafeArrayToPtr@16

!ENDIF

 

BASE_INCLUDE=  /INCLUDE:_GDALSimpleImageWarp@36 \

           /INCLUDE:_GDALReprojectImage@48 \

           /INCLUDE:_GDALComputeMedianCutPCT@32\

           /INCLUDE:_GDALDitherRGB2PCT@28 \

           /INCLUDE:_OCTNewCoordinateTransformation@8$(VB6_SAFEARRAYSYM)

 

修改为:

!IF$(MSVC_VER) < 1500

VB6_SAFEARRAYSYM=        /INCLUDE:_vbSafeArrayToPtr

!ENDIF

 

BASE_INCLUDE=  /INCLUDE:_GDALSimpleImageWarp \

           /INCLUDE:_GDALReprojectImage \

           /INCLUDE:_GDALComputeMedianCutPCT \

           /INCLUDE:_GDALDitherRGB2PCT \

           /INCLUDE:_OCTNewCoordinateTransformation$(VB6_SAFEARRAYSYM)

即删除@和后面的数字,有相关Link错误的,都需要删除。

 

6、 源码修改

1)  GDAL_HOME\frmts\gdalallregister.cpp中,GDALAllRegister()函数的第一行添加以下语句,解决中文路径问题:

CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");

2)  GDAL_HOME\ogr\ogrsf_frmts\generic\ogrregisterall.cpp中,OGRRegisterAll()函数第一行添加以下语句,解决中文路径问题:

CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");

3)  GDAL_HOME\ogr\swq.cpp文件中,swq_identify_field函数中,将以下语句:

constchar* pszDot = strchr(field_token, '.');

if(pszDot && strchr(pszDot+1, '.') == NULL )

改为:

constchar* pszDot = strrchr(field_token, '.');

if(pszDot && strrchr(pszDot+1, '.') == NULL )

4)  GDAL_HOME\ogr\ogrsf_frmts\sde\ogrsdelayer.cpp文件中,将以下语句:

char*pszUTF8 = CPLRecodeFromWChar((const wchar_t*)pszTempStringUTF16, CPL_ENC_UTF16,CPL_ENC_UTF8);

poFeat->SetField(i, pszUTF8 );

CPLFree(pszUTF8 );

修改为:

char*pszText = new char[(poFieldDef->GetWidth()+1) * sizeof(SE_WCHAR )];

memset(pszText,0, (poFieldDef->GetWidth()+1) * sizeof(SE_WCHAR ));

WideCharToMultiByte(CP_ACP,0, (WCHAR*)(pszTempStringUTF16), (poFieldDef->GetWidth()+1) *sizeof(SE_WCHAR ), pszText, (poFieldDef->GetWidth()+1) * sizeof(SE_WCHAR ),0, 0);

poFeat->SetField(i, pszText );

delete[]pszText;

pszText= NULL;

同时在最顶端添加“#include <windows.h>“,一定要放在最上面,否则编译会产生windef.h中的各种类型错误。

5)  GDAL_HOME\ogr\ogrsf_frmts\gml\gmlreader.cpp文件中的SetFeaturePropertyDirectly函数前,添加以下功能函数:

std::stringConvertUtf8ToGBK(const char* strUtf8)

{

         int len = MultiByteToWideChar(CP_UTF8,0, (LPCTSTR)strUtf8, -1, NULL,0);

         wchar_t * wszGBK = new wchar_t[len];

         //ZeroMemory(wszGBK, wcslen(wszGBK));

         memset(wszGBK, 0, len *sizeof(wchar_t));

         MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8,-1, wszGBK, len);

         len = WideCharToMultiByte(CP_ACP, 0,wszGBK, -1, NULL, 0, NULL, NULL);

         char *szGBK=new char[len + 1];

         memset(szGBK, 0, (len + 1) * sizeof(char));

         WideCharToMultiByte (CP_ACP, 0, wszGBK,-1, szGBK, len, NULL,NULL);

         std::string strTemp(szGBK);

         delete []szGBK;                  szGBK = NULL;

         delete        []wszGBK;        wszGBK = NULL;

         return strTemp;

}

在poFeature->SetPropertyDirectly(iProperty, pszValue );前,添加代码:

std::stringstrTemp = ConvertUtf8ToGBK(pszValue);

ZeroMemory(pszValue,strlen(pszValue));

strcpy(pszValue,strTemp.c_str());

在顶端添加头文件“#include<Windows.h>”与“#include <string>“。

 

7、 执行编译

Ø  对于32位,启动“VisualStudio 命令提示(2010)“。

Ø  对于64位,启动“VisualStudio x64 Win64 命令提示(2010)“。

Ø  注意,每次修改nmake.opt重新编译时,务必首先执行nmake /f makefile.vc clean清除,否则会产生链接错误。

以下对32/64位均相同

1)  cd GDAL_HOME 定位到GDAL根路径

2)  nmake /fmakefile.vc 编译

3)  nmake /fmakefile.vc install 安装

4)  nmake /fmakefile.vc devinstall 开发版本安装

 

8、 使用

Ø  对于32位,GDAL安装结果在C:\warmerda\bld32文件夹下。将C:\xerces-c-3.1.4\Build\Win32\VC10\Release路径下的xerces-c_3_1.dll放在C:\warmerda\bld32\bin目录下。

Ø  对于64位,GDAL安装结果在C:\warmerda\bld64文件夹下。将C:\xerces-c-3.1.4\Build\Win64\VC10\Release路径下的xerces-c_3_1.dll放在C:\warmerda\bld32\bin目录下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gdal-1.11.1支持proj-4.8.0和geos-3.4.2(vs2010+win7-32bit) =================================== GDAL编译说明 =================================== 功能描述:读写栅格和矢量数据格式 官方网站:http://www.gdal.org/ 下载地址:http://download.osgeo.org/gdal/ 编译平台:Window 7 (32位)+VisualStudio2010 GDAL编译步骤: 1、解压下载文件gdal-1.11.1.tar.gz到d:\gdal-1.11.1 2、新建文本文件gdal-build-vs2010.txt,重命名为gdal-build-vs2010.bat,输入以下命令: ----------------------------------------------------------- call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" cd /d d:\gdal-1.11.1 nmake /f makefile.vc nmake /f makefile.vc install nmake /f makefile.vc devinstall ----------------------------------------------------------- 3、如需编译C#版本gdal,接着输入以下命令: ----------------------------------------------------------- cd /D d:\gdal-1.11.1\swig\csharp nmake /f makefile.vc ----------------------------------------------------------- 4、用文本编辑器打开nmake.opt文件,修改默认编译选项 1) 修改默认安装路径:GDAL_HOME = "C:\warmerda\bld" 2) 静态联编PORJ.4,删除#号注释,修改PROJ源代码路径和lib路径 -------------------------------------------------- PROJ_FLAGS = -DPROJ_STATIC PROJ_INCLUDE = -Id:\proj-4.8.0\src PROJ_LIBRARY = d:\proj-4.8.0\src\proj_i.lib -------------------------------------------------- 3) 支持GEOS,删除#号注释,并修改根路径、include路径和lib路径 -------------------------------------------------- GEOS_DIR=d:/geos-3.4.2 GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS GEOS_LIB = $(GEOS_DIR)/src/geos_c_i.lib -------------------------------------------------- 注意:GDAL1.8.0以后版本不支持带中文的路径,1.7以前版本不存在这个问题。 解决办法是:调用GDALRegisterAll()和OGRAllRegiser()函数后,加上下面一句即可 CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO"); =================================== PROJ编译说明 =================================== 功能描述:投影转换 官方网站:http://trac.osgeo.org/proj/ 下载地址:http://download.osgeo.org/proj/ 编译平台:Window 7 (32位)+VisualStudio2010 编译步骤: 1、解压下载文件proj-4.8.0.zip到d:\proj-4.8.0 2、新建文本文件proj-build-vs2010.txt,重命名为proj-build-vs2010.bat,输入以下命令: -------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值