使用VS2015编译最新的64位GDAL(最新gdal2.11),确实有一些问题,看来双方还是太新了,有点不兼容,特总结如下。

以前经常用的通过VisualStudio IDE进行编译的方式现在似乎不能使用了, makegdal_gen.bat还是可以生成工程,也能升级成VS2015的工程,但是修改nmake.opt的一些配置没有生效,导致编译无法成功。

只能使用“VS2015 x64 本机工具命令提示符”来nmake工程的方法。“VS2015 x64 本机工具命令提示符”一般都在安装VS环境后的“开始”目录中可以找到。很奇怪为什么网上很多攻略不是用这个CMD窗口,而是很麻烦的设置其他窗口。

然后我们必须得把这个CMD窗口CD到下载好的源代码目录(有makefile.vc的目录),Nmake就是通过makefile.vc来编译工程的。在编译之前需要修改nmake.opt中一些配置。

GDAL_HOME = "C:\warmerda\bld",这里的路径可以修改,编译后的生成的头文件、静态库、动态库将会复制到该目录。

"#WIN64=YES",编译64位GDAL需要取消前面的#。

最后在CMD中批处理命令:

nmake -f makefile.vc

nmake /f makefile.vc install

nmake /f makefile.vc devinstall

第一个命令是编译GDAL,第二个、第三个命令是将生成的头文件、静态库、动态库复制到GDAL_HOME目录。如果需要编译debug模式,就将第一个命令改成nmake -f makefile.vc DEBUG=1。

最后编译还存在一个问题,形如:

Creating library gdal_i.lib and object gdal_i.exp

odbccp32.lib(dllload.obj) : error LNK2019: unresolved external symbol _vsnwprintf_s referenced in function StringCchPrintfW

gdal201.dll : fatal error LNK1120: 1 unresolved externals

NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\link.EXE"' : return code '0x460' Stop.

在网上查找攻略,得知是矢量格式odbc这部分的问题。这部分内容涉及到的环境在VS2015下貌似被修改,导致GDAL不兼容。不过我也没有试验是不是VS2015的专属问题。网上提到的第一个方法是nmake.opt中如下内容:

!IFDEF ODBC_SUPPORTED

ODBCLIB = odbc32.lib odbccp32.lib user32.lib

!ENDIF

替换成:

!IFDEF ODBC_SUPPORTED

!IF $(MSVC_VER) >= 1900

# legacy_stdio_definitions.lib : https://connect.microsoft.com/VisualStudio/feedback/details/1134693/vs-2015-ctp-5-c-vsnwprintf-s-and-other-functions-are-not-exported-in-appcrt140-dll-breaking-linkage-of-static-libraries

ODBCLIB = legacy_stdio_definitions.lib odbc32.lib odbccp32.lib user32.lib

!ELSE

ODBCLIB = odbc32.lib odbccp32.lib user32.lib

!ENDIF

!ENDIF

很可惜这部分内容和nmake.opt中的一模一样,貌似已经被GDAL官方采用并修改好了。也就是说第一个方法是不行的,不知道是不是我采用64位编译的原因。

第二个办法是注释掉对矢量格式odbc的支持,即:

# Comment out the following to disable ODBC support.

ODBC_SUPPORTED = 1

修改成:

# Comment out the following to disable ODBC support.

# ODBC_SUPPORTED = 1

第二个办法是可以成功编译的,稍微遗憾的是缺少了矢量格式odbc的支持,对我来说是够用了。希望GDAL官方能进一步跟进,当然大家有更好的办法也希望批评指正。

gdal1.6linux编译,VS2015下编译64位GDAL总结相关推荐

  1. 使用VS在64位平台下编译代码,生成64位dll

    最近要把一个之前在32位平台下编译的项目改成64位平台,之前从来没搞过关于64位的东西,所以到处查资料,所幸搞成功了,把过程记录一下,防止以后忘记. 首先声明:64位平台无法直接调用32位dll,32 ...

  2. 雷塞SMC304系列控制器VC6.0例程在VS2015下编译遇到的若干问题及解决办法

    雷塞SMC304系列控制器VC6.0例程在VS2015下编译遇到的若干问题及解决办法 标签(空格分隔): 雷塞 SM304 WIN10 VS2015 最近由于导师要求,负责喷涂机器人的控制部分,接触到 ...

  3. vc2010下使用64位控件

    vc2010下使用64位控件 最近把我的控件(ST_Curve www.st-curve.cn)升级到了64位,2010编译,本来以为很简单的问题,结果折腾了两天(也有可能我多年没做过界面和vc相关的 ...

  4. 如果在安装32位oracle 客户端组件时的情况下以64位模式运行,将出现问题

    今天要写个程序,环境是win7+ vs2008+ oracle.首先得保证能连接到数据库.确认代码是没有问题的,但是拿过来直接.报错: "尝试加载 Oracle 客户端库时引发 BadIma ...

  5. 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。...

    从10G开始,Oracle提供了一个较为轻量级的客户包,叫做Instant Client. 将它安装好后,就不用再安装庞大的Oracle Client了.  这样一来,只要客户端下载Instant C ...

  6. 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题...

    开发环境:VS2010+ORACLE,今天换了64位WIN7 ,为了方便使用PL/SQL,装了32位oracle客户端,但是本地IIS调试程序的时候总是提示:尝试加载 Oracle 客户端库时引发 B ...

  7. 64位系统下同时使用64位和32位的eclipse

    64位系统下同时使用64位和32位的eclipse eclipse.ini 文件使用说明 The -vm option and its value (the path) must be on sepa ...

  8. FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

    FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, M ...

  9. Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)

    Windows下mysql 64位 安装(mysql-5.7.11-winx64安装) 系统Windows10 安装包mysql-5.7.11-winx64.zip 安装过程中遇到的问题,请留意4.0 ...

最新文章

  1. 【 MATLAB 】Rational Transfer Function(有理传递函数)
  2. ebs oracle pl sql开发_PL/SQL设置
  3. 软件常见基础问题总结
  4. java 解决故意弄得错误,高效的Java错误处理
  5. leetcode1509. 三次操作后最大值与最小值的最小差
  6. php upw5.5,UPW
  7. git 忽略 部分文件夹_git提交忽略某些文件或文件夹
  8. oracle undo管理机制,Oracle UNDO数据概念和管理
  9. MyEclipse 2015 运行tomcat 内存溢出的解决方法
  10. comptia a+_CompTIA认证考试– A +,Network + Security +,CASP,Linux +和IT基础实践测试和网站
  11. postgresql某进程占用cpu资源过高,降不下来
  12. Android键盘属性
  13. 联想ts250进bios_联想Think TS250/TS550安装server 2008 R2/2012系统教程【一】
  14. 一位瑞典程序员的创业感悟
  15. android恢复删除文件,如何恢复手机删除的文件
  16. 教你如何在Windows XP使用定时关机命令
  17. 猿创征文|瑞吉外卖——管理端_菜品管理_1
  18. 洛谷【P1873】 砍树 简单二分解析
  19. 面试官:Spring 用了哪些设计模式?说三种即可 = =
  20. 让座席管理工作听得见也看得着

热门文章

  1. SQL 查找重复记录
  2. 在VsCode里编写和运行不同语言的程序
  3. 链表C++ | 实现头部、尾部插入数据_1
  4. iic总线从机仲裁_IIC协议底层原理超详细解析!示波器,逻辑分析仪多图预警
  5. csh shell_一篇文章从了解到入门shell
  6. Pentium M处理器架构/微架构/流水线(1) - 流水线概述
  7. VS2008中C++打开Excel(MFC)
  8. ubuntu 下eclipse 启动时出现An error has occurred. See the log file的问题
  9. 台湾大学公开课《概率》六到九章笔记以及课程总结
  10. 自己组装服务器计算机,深度学习服务器组装经验过程分享