链接器错误构建GDAL

时间:2015-10-21 18:23:26

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

我正在使用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 个答案:

答案 0 :(得分:6)

我编辑了nmake.opt:

我更换了第667行...:

   Dim rst As DAO.Recordset
   Dim strSQL As String
   Dim Variable1 As String

   strQry = "Query1"
   Set rst = CurrentDb.OpenRecordset(strQry)

 Variable1 = ????? 
   rst.Close
   Set rst = Nothing

使用:

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

/安德斯

答案 1 :(得分:6)

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 :(得分:0)

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

表示

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

应改为:

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