编译GDAL时出现链接器错误

6

我正在使用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)。有人成功使用MSVC 2015(64位)构建GDAL吗?

3个回答

7

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

6
我编辑了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

/安德斯


参考链接:https://connect.microsoft.com/VisualStudio/feedback/details/1039102 - Kelly Elton
它已经构建并消除了链接器错误。我将安装Python绑定并尝试一下。谢谢! - rmkemker
构建成功了...我正在使用它与Python支持一起使用(从https://pypi.python.org/pypi/GDAL/单独构建了Python绑定),这相对容易。感谢您的帮助! - rmkemker

0
除了以上内容,我还需要对nmake.opt文件进行以下修改:
说的那一行
!IFNDEF MSVC_VER
#assume msvc VS2008.
MSVC_VER=1500
!ENDIF

应该被更改为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接