2015-10-21 3 views
4

Я создаю GDAL из исходного кода, используя 64-разрядную командную строку MSVC 2015. Я использую Windows 8. Часть путь через сборки, я получаю следующее сообщение об ошибке:Ошибка сборки компоновщика GDAL

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 Site и раздел, что это была проблема с 2014 MSVC и пре-релиз GDAL Гит вопросы версия MSVC 2015, но этот вопрос должен был быть решен до окончательного освобождения MSVC 2015.

Я, похоже, не единственный человек с этой проблемой, но я также не вижу решения (помимо возврата к более старой версии MSVC, такой как 2013). Неужели кому-то повезло с GDAL для сборки с использованием MSVC 2015 (64 бит)?

ответ

5

Я редактировал 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 

/Anders

+0

для справки https://connect.microsoft.com/VisualStudio/fe edback/details/1039102 –

+0

Он создал и избавился от ошибки компоновщика. Я собираюсь установить привязки python и попробовать его. Благодаря! – rmkemker

+0

Сборка работала ... Я использую ее с поддержкой Python (построил привязки Python отдельно от https://pypi.python.org/pypi/GDAL/), что было относительно легко. Спасибо за вашу помощь! – rmkemker

5

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 

но вы также должны указать версию Visual Studio из командной строки с параметром MSVC_VER. , например. для Visual Studio 2015 (MSVC_VER == 1900) использовать эту командную строку для компиляции

nmake -f makefile.vc MSVC_VER=1900 
0

В дополнение к вышесказанному, я также должен был сделать следующее изменение в nmake.opt файла:

линии что говорит

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

Должен быть изменен на:

!IFNDEF MSVC_VER 
#assume msvc VS2015. 
MSVC_VER=1900 
!ENDIF 
Смежные вопросы