链接器错误构建 GDAL
Linker Error Building GDAL
我正在使用 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 的最终版本。
- https://github.com/mapbox/windows-builds/issues/53
- 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
我似乎不是唯一遇到此问题的人,但我也没有看到解决方案(除了恢复到旧版本的 MSVC,例如 2013)。有人有幸使用 MSVC 2015(64 位)构建 GDAL 吗?
我编辑了 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
/安德斯
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
除上述之外,我还必须对 nmake.opt 文件进行以下修改:
表示
的那一行
!IFNDEF MSVC_VER
#assume msvc VS2008.
MSVC_VER=1500
!ENDIF
应改为:
!IFNDEF MSVC_VER
#assume msvc VS2015.
MSVC_VER=1900
!ENDIF
我正在使用 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 的最终版本。
- https://github.com/mapbox/windows-builds/issues/53
- 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
我似乎不是唯一遇到此问题的人,但我也没有看到解决方案(除了恢复到旧版本的 MSVC,例如 2013)。有人有幸使用 MSVC 2015(64 位)构建 GDAL 吗?
我编辑了 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
/安德斯
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
除上述之外,我还必须对 nmake.opt 文件进行以下修改:
表示
的那一行!IFNDEF MSVC_VER
#assume msvc VS2008.
MSVC_VER=1500
!ENDIF
应改为:
!IFNDEF MSVC_VER
#assume msvc VS2015.
MSVC_VER=1900
!ENDIF