【问题标题】:Linker Error Building GDAL链接器错误构建GDAL
【发布时间】:2016-01-20 21:02:52
【问题描述】:

我正在使用 MSVC 2015 64 位命令提示符从源代码构建 GDAL。我使用的是 Windows 8。在构建过程中,我收到以下错误:

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.

我在 Microsoft 站点和 GDAL Git 问题部分阅读到,这是 2014 MSVC 和 MSVC 2015 的预发布版本的问题,但该问题应该在 MSVC 2015 的最终版本之前得到解决。

我似乎不是唯一遇到此问题的人,但我也没有看到解决方案(除了恢复到 MSVC 的旧版本,例如 2013)。有没有人有幸让 GDAL 使用 MSVC 2015(64 位)构建?

【问题讨论】:

    标签: c++ visual-c++ visual-studio-2015 gdal nmake


    【解决方案1】:

    GDAL-2.1.0 已经对 nmake.opt 进行了类似的更改

    !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
    

    但您还必须从命令行使用参数 MSVC_VER 指定 Visual Studio 版本。 例如对于 Visual Studio 2015 (MSVC_VER==1900) 使用此命令行编译

    nmake -f makefile.vc MSVC_VER=1900
    

    【讨论】:

      【解决方案2】:

      我编辑了 nmake.opt:

      我替换了第 667 行 ...:

      !IFDEF ODBC_SUPPORTED  
      ODBCLIB = odbc32.lib odbccp32.lib user32.lib  
      !ENDIF
      

      与:

      !IFDEF ODBC_SUPPORTED  
      !IF $(MSVC_VER) < 1900  
      ODBCLIB = odbc32.lib odbccp32.lib user32.lib  
      !ELSE  
      ODBCLIB = legacy_stdio_definitions.lib odbc32.lib odbccp32.lib user32.lib  
      !ENDIF  
      !ENDIF
      

      /安德斯

      【讨论】:

      【解决方案3】:

      除了上述之外,我还必须对nmake.opt文件进行以下修改:

      上面写着

      !IFNDEF MSVC_VER
      #assume msvc VS2008.
      MSVC_VER=1500
      !ENDIF
      

      应改为:

      !IFNDEF MSVC_VER
      #assume msvc VS2015.
      MSVC_VER=1900
      !ENDIF
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        相关资源
        最近更新 更多