четверг, 11 октября 2012 г.

Кросскомпиляция в Lazarus для win32(x86) и win64

Несмотря на указанную возможность в среде Lazarus компилировать для нескольких платформ, из коробки эта фича не работает.


Выбор платформы, для которой будет компилироваться приложение делается в меню Project->Project Options->Compiler Options->Code Generation->Target platform
Здесь указывается:
  • Target OS - целевая операционная система, для Windows актуальны Win32 и Win64
  • Target CPU family - тип используемых команд процессора. Обычно это i386 или x86_64
  • Target processor - выбор поколения процессора. На сегодня не актуально - почти всегда можно оставлять default
 Для компиляции под Win x32 и Win x64 я использую Win32/i386 и Win64/x86_64.

Существует возможность сделать несколько билд-модов (Project Options->Build Modes), в которых сохранить конфигурации под разные системы.
В таком случае кнопка выбора билда появится на панели кнопок, рядом с кнопкой запуска приложения.
К сожалению, нельзя сохранять эти моды между проектами, они привязываются только к текущему.

Но если бы можно было просто выбрать целевую операционку и спокойно перекомпилировать приложение под неё - эта заметка бы не появилась.
Установленный Lazarus может собрать приложение только под ту операционку, для которой он был скачан. Так, скачав версию для x64 вы не сможете собитать x86-приложения.
Нехватает некоторых файлов (пример для x86):
  1. lazarus32\lcl\units\i386-win32 (копируем всю папку в lazarus64\lcl\units\)
  2. lazarus32\fpc\2.x.x\units\i386-win32 (копируем всю папку в lazarus64\fpc\2.x.x\units\)
  3. lazarus32\fpc\2.x.x\bin\i386-win32\ppc386.exe (копируем 1 файл в lazarus64\fpc\2.x.x\bin\x86_64-win64)
Эти недостающие файлы берутся из соответствующей версии Lazarus:
поставили lazarus x86, скопировали из него файлы в lazarus x64, удалили x86 версию.

После этого можно без ошибок выбирать x86-версию для компиляции и радоваться жизни.

4 комментария:

  1. Добавьте ещё один пункт в инструкцию:
    lazarus32\mingw\i386-win32 (копируем всю папку в lazarus64\mingw\), иначе не будет работать Отладчик и нельзя будет ставить точки останова.

    ОтветитьУдалить