VS2015編譯GDAL庫出現宏重復定義 snprintf: 宏重定義


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM