zoukankan      html  css  js  c++  java
  • VS2015下编译64位GDAL总结

    使用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中一些配置。

    1. GDAL_HOME = "C:warmerdald",这里的路径可以修改,编译后的生成的头文件、静态库、动态库将会复制到该目录。
    2. "#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.0VCBINamd64link.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官方能进一步跟进,当然大家有更好的办法也希望批评指正。

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/charlee44/p/5718032.html
Copyright © 2011-2022 走看看