Не могу собрать gdal в x64

Я пытаюсь собрать GDAL (1.9.2) в x64.

В инструкции вижу:

# Uncomment the following if you are building for 64-bit windows
# (x64). You'll need to have PATH, INCLUDE and LIB set up for 64-bit
# compiles.
!IF "$(PLATFORM)" == "x64"
WIN64=YES
!ENDIF

А потом, ниже,

# Under win64, symbols for function names lack the underscore prefix
# present on win32. Also the STDCALL calling convention is not used.
!IFDEF WIN64
!UNDEF STDCALL
!ELSE
SYM_PREFIX=_
!ENDIF

Не могу найти PATH, INCLUDE и LIB для x64 или что-то еще, что я должен сделать...

Я могу собрать в Win32.

В x64 я получаю ошибки компоновщика:

LINK : error LNK2001: unresolved external symbol _OGRFeatureStylePuller
LINK : error LNK2001: unresolved external symbol _OSRValidate
...
gdal19.dll : fatal error LNK1120: 74 unresolved externals
NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 
10.0\VC\BIN\link.EXE"' : return code '0x460'

Ставлю (для сборки в Win32)

!IFNDEF PLATFORM
PLATFORM=WIN32
!ENDIF

Изменено на

!IFNDEF PLATFORM
PLATFORM=x64
!ENDIF

(сборка в x64) - И заработало. Но только если я строю изнутри Visual Studio.

Я хотел бы иметь возможность использовать файл bat (и собирать все платформы/конфигурации). Вышеупомянутое - пока он строится в VS, он не будет строиться из командной строки (с командами:

start /b /wait nmake -f makefile.vc clean
start /b /wait nmake.exe /f makefile.vc PLATFORM=x64
start /b /wait nmake.exe /f makefile.vc devinstall PLATFORM=x64

То же самое в Win32...

Я не могу понять, что не так...


person Thalia    schedule 13.05.2013    source источник


Ответы (4)


Мне удалось собрать x64-версию GDAL под Visual Studio 2012, используя шаги из http://dominoc925.blogspot.ru/2013/03/build-64-bit-gdal-for-windows.html:

  1. Загрузите gdal-1.9.2.tar.gz (или другую версию исходного кода) с http://download.osgeo.org/gdal/
  2. Распаковать в какой-нибудь каталог, например C:\tmp\gdal-1.9.2\

    Если вы пытались собрать GDAL ранее (например, x86), убедитесь, что каталог сборки (C:\warmerda\bld\) и исходный каталог не содержат предыдущую попытку сборки. Если не уверены, попробуйте распаковать исходники в новый каталог.

  3. Пуск VS2012 x64 Native Tools Command Prompt: Пуск -> Все программы -> Microsoft Visual Studio 2012 -> Инструменты Visual Studio -> Open VS2012 x64 Native Tools Command Prompt

    Или запустить %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64).

  4. Перейдите в каталог с распакованным исходным кодом GDAL:

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>cd /D C:\tmp\gdal-1.9.2
    
    D:\trn4\gdal-1.9.2>
    
  5. Соберите GDAL с файлами разработки:

    nmake /f makefile.vc MSVC_VER=1700 WIN64=YES
    nmake /f makefile.vc MSVC_VER=1700 WIN64=YES install
    nmake /f makefile.vc MSVC_VER=1700 WIN64=YES devinstall
    

Вы можете получить свой номер MSVC_VER здесь. GDAL будет собран и установлен на C:\warmerda\bld\.

person rutsky    schedule 22.07.2014
comment
Комбинация трех ответов сработала для меня. Как прокомментировала @Thalia, я установил переменные с помощью "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat", мне пришлось стереть каталог сборки из-за предыдущей установки x86 после комментария @Solkar, и, наконец, инструкции @rutsky сработали как прелесть. Инструкции Руцкого намного понятнее, чем на странице gdal, - person quimnuss; 17.07.2015
comment
@quimnuss рад помочь! Я добавил примечание об очистке каталогов сборки/исходников перед сборкой. Если у вас есть, что добавить к инструкции --- смело редактируйте. - person rutsky; 17.07.2015

Для сборки с помощью командной строки nmake мне пришлось запустить команду из командной оболочки, в которой установлены соответствующие переменные для сборки для 64-битной версии.

Вот что я сделал для настройки 64-битной среды сборки:

вызовите "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64

person Thalia    schedule 13.05.2013

Сначала вы должны каким-то образом дать понять читателям этой темы, что за 6 правок, которые вы уже сделали, фокус вашего вопроса менялся более одного раза, как видно из история изменений

В любом случае: теперь это просто проблема с пакетной и сборочной работой; попробуйте экспортировать make-файл из VS

ЭКСПОРТ! НЕ открывайте оригинальный пакет makefile.vc в окне редактора!

, сохраните его под именем, отличным от "makefile.vc" пакета, и используйте его в своем пакете.

person Solkar    schedule 14.05.2013
comment
Спасибо. Я не знал, что могу это сделать - экспортировать make-файл из VS! Единственное улучшение, которое имел бы VS makefile, заключалось бы в настройке среды сборки - если бы я знал, я бы смог решить эту проблему намного быстрее. (Правки к моему сообщению: тот факт, что я пытался построить с помощью VS, который помог мне отследить проблему, и я добавил эту информацию в сообщение - никоим образом не изменил проблему или объем вопроса. Делал не хотел запутать читателей... Как раз наоборот. Угадывать не удалось.) - person Thalia; 14.05.2013

«Я могу построить в Win32».

Вы собирали для Win32 ДО попытки сборки Win64?

Если да, пожалуйста, посетите http://trac.osgeo.org/gdal/ticket/4636 внизу списка ответов:

Просто на заметку для всех, у кого есть проблема. Я постараюсь изучить это подробнее, когда смогу.. но в то же время чистая сборка на самом деле не выполняет «чистку», поэтому убедитесь, что вы вручную удалили свои файлы, если вы делаете 32-битную сборку перед 64-битной сборкой.

Вы также можете попытаться просто снова извлечь исходный код в другой каталог, чтобы иметь чистое дерево и попытаться собрать его для Win64.

person Solkar    schedule 13.05.2013
comment
Я действительно заметил проблему, требующую очистки даже между разными сборками Win32 (отладка/выпуск). Я запустил очистку - у меня есть файл bat, который просто вызывает start /b /wait nmake -f makefile.vc clean - я также удалил файлы вручную ... Кажется, я должен сказать ему где-то еще, что это х64. - person Thalia; 13.05.2013
comment
Обратите внимание, что я не получаю конфликта между целевым компьютером и типом модуля модуля - как в этом билете - кажется, что тег _WIN64 либо не установлен, либо просто игнорируется. - person Thalia; 13.05.2013
comment
Почему вы предпочитаете тратить время на ручную сортировку вещей, когда ваша машина может помочь вам в отслеживании проблемы? Извлеките его свежим, дайте машине поработать на сборке для Win64, а пока выпейте чашечку кофе. ;) - person Solkar; 13.05.2013
comment
Это именно то, что я хочу - с файлом bat, который будет создавать все 4 комбинации платформы/конфигурации. :-) - person Thalia; 13.05.2013
comment
;) Ну, вы также можете извлечь в 4 разных каталога и собрать каждый отдельно в пакетном режиме, поэтому выполнять всю работу в одном каталоге не к.о. критерий. Интересно, почему бы вам просто не попробовать это - вы не любите кофе-брейки? ;) - person Solkar; 13.05.2013
comment
Я пытаюсь сделать это - вроде как - дело в том, что файл bat не будет собираться для x64, хотя я могу собрать x64 из VS. - person Thalia; 13.05.2013
comment
Я понимаю, что теперь вы можете строить чистые деревья, используя VS GUI. Оставшаяся проблема заключается в написании сценария этого процесса сборки, по крайней мере, это то, что я беру из вашего последнего комментария и РЕДАКТИРОВАТЬ вашего вступительного поста. Правильно? - person Solkar; 14.05.2013