先安装VS 2012, 然后下载GDAL最新版本代码,解压。
用管理员权限打开Developer Command Prompt for VS2012终端,进入代码目录。
然后运行命令:
nmake /f makefile.vc
等待一会儿,编译完成后,运行命令安装:
nmake /f makefile.vc install
可能是之前并没有设置BINDIR和DATADIR环境变量,根据默认值找不到安装目录,所以会提问找不到目录,问是文件还是目录,选择"D"后,自动创建目录。
安装成功,默认安装在目录:
C:\warmerda\bld
如果想要开发的库的话,运行下面的命令安装:
nmake /f makefile.vc devinstall
安装目录下出现了include和lib两个子目录。
通过写程序使用,发现进程退出时总是出错。用了另一个美国同事的编译的库,一点问题都没有。还是回过头来继续查我编译的时候的问题。之前因为操作太快,没有仔细阅读文档:
http://trac.osgeo.org/gdal/wiki/BuildingOnWindows
http://trac.osgeo.org/gdal/wiki/BuildingOnWindows#BasicOptions
现在打开nmake.opt文件,看到了原来在name.opt中说明了编译时需要指定VC版本。
# Usage examples (see details below):
# nmake -f makefile.vc
# nmake -f makefile.vc MSVC_VER=1400
# nmake -f makefile.vc MSVC_VER=1500 DEBUG=1
# nmake -f makefile.vc MSVC_VER=1600 DEBUG=1 ANALYZE=1
#
具体MSVC_VER的值说明也在该文件中:
###############################################################################
# Check version of Visual C++ compiler:
# nmake -f makefile.vc MSVC_VER=xxxx
# where xxxx is one of following:
# 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)
# 1300 = 7.0 (2002)
# 1200 = 6.0
#
那么如果编译时不指定,默认是哪个?就像我前面的操作一样。
!IFNDEF MSVC_VER
#assume msvc VS2008.
MSVC_VER=1500
!ENDIF
也就是VC2008. 我现在使用的是VC2012。所以怀疑进程退出错误是由此引起的。
现在重新编译一次。删除C盘的warmerda目录,然后
打开VC2012终端,输入命令:
nmake /f makefile.vc MSVC_VER=1700 DEBUG=1
但是很不幸,编译报错。进入GDAL目录,查看VC工程文件,发现最高也就支持VS2012的版本,
makegdal10.sln
因此不能用VS 2012打开编译。结论很糟糕,目前VS 2012还不能编译成功。
然后我用了美国同事提供的代码,删除了很多不需要的driver,编译通过了。不过因为是公司内部版本,这里不好透露了。不过也是个解决方案,如果发现编译不能通过,去掉相关的代码即可。哈哈。