GDAL(Geospatial Data Abstraction Library)という地理空間情報ライブラリをVisual Studio (Visual C++)で使えるようにする方法をまとめました。
動作確認をした環境は以下です。
- Windows7 Pro 64bit + Visual Studio 2013 + GDAL 2.1.3
- Windows10 Pro 64bit + Visual Studio 2015 + GDAL 2.1.3
本ページでは、Windows7 Pro 64bit + Visual Studio 2013 + GDAL 2.1.3を想定しています。
リンク
- GDAL http://www.gdal.org/
- GDALソースコード http://download.osgeo.org/gdal/
- GDAL API Tutorial http://www.gdal.org/gdal_tutorial.html
ソースコードのビルド
まず、リンクの2.から適当なバージョンのソースコードをダウンロードしてきてZIPファイルを展開します。このページでは仮にC:\gdal213に展開したものとします。
次にC:\gdal213\nmake.optをテキストエディタで開きOPTFLAGS=の右辺の/MDを/MDdに書き換えます。ただし全てではなく、条件"!IFNDEF DEBUG"に入る箇所はそのままにします。
!IFNDEF OPTFLAGS
!IF $ (MSVC_VER) >= 1400
!IFNDEF DEBUG #ここの/MDは書きかえない
OPTFLAGS= $ (CXX_ANALYZE_FLAGS) $(CXX_PDB_FLAGS) /nologo /MD /EHsc /Ox /FC /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DNDEBUG
!ELSE #ここの/MDは/MDdに書きかえる
OPTFLAGS= $ (CXX_ANALYZE_FLAGS) $(CXX_PDB_FLAGS) /nologo /MDd /EHsc /FC /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DDEBUG
!ENDIF
!ELSE
!IFNDEF DEBUG #ここの/MDは書きかえない
OPTFLAGS= $ (CXX_PDB_FLAGS) /nologo /MD /EHsc /GR /Ox /FC /DNDEBUG
!ELSE #ここの/MDは/MDdに書きかえる
OPTFLAGS= $ (CXX_PDB_FLAGS) /nologo /MDd /EHsc /GR /FC /DDEBUG
!ENDIF
!ENDIF #MSVC_VER
!ENDIF # OPTFLAGS
VisualStudioのコマンドプロンプトを立ち上げ、以下コマンドを実行します。ビルドの環境によってコマンドプロンプトが異なりますので注意してください。
ビルド環境 | コマンドプロンプト | コマンド |
---|---|---|
32bit Debug | VS2013 x86 Native Tools コマンド プロンプト | $ nmake /f makefile.vc clean $ nmake /f makefile.vc MSVC_VER=1800 DEBUG=1 WITH_PDB=1 |
32bit Release | VS2013 x86 Native Tools コマンド プロンプト | $ nmake /f makefile.vc clean $ nmake /f makefile.vc MSVC_VER=1800 |
64bit Debug | VS2013 x64 Native Tools コマンド プロンプト | $ nmake /f makefile.vc clean $ nmake /f makefile.vc MSVC_VER=1800 DEBUG=1 WIN64=YES WITH_PDB=1 |
64bit Release | VS2013 x64 Native Tools コマンド プロンプト | $ nmake /f makefile.vc clean $ nmake /f makefile.vc MSVC_VER=1800 WIN64=YES |
MSVC_VER=1800の部分はVisualStudioのバージョンによって変える必要があります。nmake.optに書いてある以下の表を参考にしてください。
###############################################################################
# Check version of Visual C++ compiler:
# nmake -f makefile.vc MSVC_VER=xxxx
# where xxxx is one of following:
# 1900 = 14.0(2015)
# 1800 = 12.0(2013)
# 1700 = 11.0(2012)
# 1600 = 10.0(2010)
# 1500 = 9.0 (2008)
# 1400 = 8.0 (2005) - specific compilation flags, different from older VC++
# 1310 = 7.1 (2003) # is it still supported ?
# 1300 = 7.0 (2002) # is it still supported ?
下記のエラーメッセージが出て処理が止まった場合
ogrsxflayer.cpp(733) : error C2181: else文がifと一致しません
C:\gdal213\ogr\ogrsf_frmts\sxf\ogrsxflayer.cppをテキストエディタで開き、733行目にあるif文の右のコメントを削除してください。あるいはif文に中括弧{}を追加してもかまいません。終わったら保存して閉じてコマンドを再度実行します。
[2017-09-17追記]Ver2.2.1ではエラーなく完了するようです。
処理がエラーなく終了したらC:\gdal213内にgdal.libとgdal_i.libが作られていることを確認します。
[2017-11-11追記]nmake.opt内を読むと両方作成されるはずはないのですが、なぜかVer2.1.3では両方作成されます。Ver.2.2.1では特に指定しなければgda_i.libのみが作成されます。
Visual Studioの設定
VisualC++の空のプロジェクトを作り、ソリューションエクスプローラからソリューションを右クリックしてプロパティを開きます。
- C/C++>全般>追加のインクルードディレクトリに以下を追加
C:\gdal213\alg
C:\gdal213\gcore
C:\gdal213\ogr
C:\gdal213\port
- C/C++>プリプロセッサ>プリプロセッサの定義に以下を追加
_CRT_SECURE_NO_DEPRECATE
- リンカー>全般>追加のライブラリディレクトリに以下を追加
C:\gdal213
-
リンカー>入力>追加の依存ファイルに以下を追加
※"legacy_stdio_definitions.lib"はVS2013では不要
gdal_i.lib
ws2_32.lib
legacy_stdio_definitions.lib
以上でインストールと設定は完了です。リンク3.のサンプルコードなどで動作を確認してください。
不具合などありましたらコメントで知らせていただけると幸いです。