С выходом macOS 15.4 (Sequoia) многие разработчики, использующие Free Pascal и Lazarus, столкнулись с проблемами при компиляции проектов. В этой статье мы разберем причины возникновения ошибок, предложим рабочие решения и альтернативные подходы для продолжения разработки на платформе macOS.
Основные симптомы проблемы
После обновления до macOS 15.4 пользователи начали сообщать о следующих ошибках:
Ошибка линковки: -macosx_version_min has been renamed to -macos_version_min
Проблемы с ресурсами: no platform load command found in ... assuming: macOS
Ошибки при сборке RTTI: .cfi_startproc was here
Пример лога ошибки:
Error: ld: Assertion failed: (false && "Malformed method list"), function getMethods, file ObjC.cpp, line 150.
An error occurred while linking
Error: Error while linking
Причины возникновения проблем
Основная причина неполадок - изменения в инструментах разработки Apple:
Xcode 16.3: В новой версии изменились требования к линковке и обработке ресурсов
Переименование параметров: Apple изменила название ключевого параметра -macosx_version_min на -macos_version_min
Новые требования к метаданным: macOS 15.4 требует более строгого соблюдения форматов метаданных в исполняемых файлах
Решения проблемы
1. Использование параметра -WM
Добавьте в настройки проекта (Project Options > Compiler Options > Custom Options > Conditionals):
If TargetOS = 'darwin' then
begin
CustomOptions += '-WM10.9';
end;
Или для всех проектов добавьте в /etc/fpc.cfg:
#ifdef cpuaarch64
#IFDEF Darwin
-WM10.15
#ENDIF
#endif
Убедитесь, что в терминале выполняется правильная версия: bash xcode-select -p
3. Использование FPC trunk
Установите последнюю версию FPC из репозитория:
В fpcupdeluxe выберите "FPC trunk"
Отключите опцию "use jobs for gnu make" в настройках
Выполните установку
4. Сборка для x86_64
Если возможно, временно переключитесь на сборку для архитектуры x86_64:
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Classes;
begin
writeln('Hello, world!');
end.
Альтернативные решения
1. Использование внешнего ассемблера
Хотя в текущей версии FPC это сложно реализовать, можно попробовать:
Установить nasm или другой совместимый ассемблер
Настроить FPC на использование внешнего ассемблера через параметры компилятора
2. Ручная обработка ресурсов
Для проектов с ресурсами можно попробовать:
Отключить автоматическую обработку ресурсов
Создавать ресурсы вручную с помощью инструментов macOS
Подключать их через отдельные инструкции
Пример кода без автоматической обработки ресурсов:
program ManualResourceDemo;
{$mode objfpc}{$H+}
uses
Classes, SysUtils;
begin
// Здесь можно вручную загружать необходимые ресурсы
WriteLn('Приложение с ручным управлением ресурсами');
end.
Тестируйте на разных версиях: По возможности проверяйте сборку на нескольких версиях macOS
Используйте системы контроля версий: Это позволит быстро откатиться при возникновении проблем
Сообщайте о багах: Если вы обнаружили проблему, создайте отчет в баг-трекере FPC
Пример рабочего конфига для macOS 15.4
Для проектов, которые должны работать на macOS 15.4, можно использовать следующий подход:
program MacOSApp;
{$mode objfpc}{$H+}
{$IFDEF DARWIN}
{$IFDEF CPUAARCH64}
{$LINKFRAMEWORK Cocoa}
{$MINSTACKSIZE 16384}
{$MAXSTACKSIZE 65536}
{$PACKRECORDS C}
{$ENDIF}
{$ENDIF}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Classes, CocoaAll;
begin
// Инициализация приложения
WriteLn('Приложение успешно запущено на macOS 15.4');
end.
Заключение
Проблемы с компиляцией в macOS 15.4 носят временный характер и связаны с изменениями в инструментах разработки Apple. Наиболее стабильными решениями на данный момент являются:
Использование параметра -WM для указания версии macOS
Откат Xcode Command Line Tools до версии 16.2
Переход на FPC trunk для получения последних исправлений
Разработчики Free Pascal уже работают над исправлениями, и в ближайших версиях проблемы должны быть полностью решены. Следите за обновлениями компилятора и среды разработки, чтобы всегда иметь актуальные исправления.
Для оперативного получения информации о проблеме и ее решении вы можете отслеживать issue #41570 в официальном репозитории Lazarus.
Проблема компиляции в macOS 15.4 связана с изменениями в инструментах разработки Apple, вызывающими ошибки при сборке проектов на Free Pascal и Lazarus.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS