E:\OpenSourceGraph\gdal-1.10.0\gdal\port cpl_config.h 20行
#define HAVE_VPRINTF 1
#define HAVE_VSNPRINTF 1
#define HAVE_SNPRINTF 1
#if defined(_MSC_VER) && (_MSC_VER < 1500)
# define vsnprintf _vsnprintf
#endif
//#define snprintf _snprintf
#if defined(_MSC_VER) && (_MSC_VER < 1900)
# define snprintf _snprintf
#endif
----------------------------------------------------------
https://www.cnblogs.com/liulunheng/articles/7044292.html
https://www.cnblogs.com/arxive/p/7854167.html
1 准備工作
gdal官網下載源碼,准備好編譯工具,對於.net開發人員來講,vs肯定最為熟悉了,但只會C#的童鞋,在安裝vs時,可能就只選了C#這一種語言,那就悲劇了,因為壓根就沒有C++環境,最基礎的C++庫文件都沒有,如何編譯呢,所以這里重要的事說三遍,必須是安裝了VC++的VS才能進行編譯。
此外,由於后面要在C#程序中調用,C#的接口dll也是少不了要編譯的,這個需要借助swig,所以下載一個swig也是必不可少的,需要的版本可以參考gdal官網:http://trac.osgeo.org/gdal/wiki/GdalOgrCsharpCompile
然后就是修改nmake.opt文件,主要有兩處,一處是GDAL_HOME,指定源碼所在文件夾,一般建議將文件夾的名稱改成gdal,並且放在C盤根目錄下,這樣可方便后面操作,另外一處是90行,swig.exe的路徑,可先將下載后swig程序包解壓到C盤,就可以獲得swig.exe所在位置的絕對路徑。
除此之外,由於gdal1.8后增加了對路徑是否為UTF8編碼的判斷,直接編譯后獲得的exe程序不支持中文路徑,在利用命令行調用原生exe處理數據時,有一些麻煩,這里可以在編譯前通過修改源碼來解決這個問題。將下面一句
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
分別添加到GDALAllRegister()函數【GDAL_HOME\frmts\gdalallregister.cpp73行左右】和OGRRegisterAll()函數【GDAL_HOME\ogr\ogrsf_frmts\generic\ogrregisterall.cpp38行左右】中。
2 編譯gdal.dll
從windows開始菜單的vs應用程序文件夾中打開visual stuido 命令提示,然后先后輸入以下三行命令,即可完成gdal.dll和原生exe的編譯,編譯結果在bin文件夾中。
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
第一個命令是編譯GDAL
第二個、第三個命令是將生成的頭文件、靜態庫、動態庫復制到GDAL_HOME目錄。
如果需要編譯debug模式,就將第一個命令改成nmake -f makefile.vc DEBUG=1