(ответ на различные замечания FPC, но мне нужно больше места)
Для хорошего понимания, вы должны знать, что delphi .dcu преобразуется в два разных файла FPC, файл .ppu с упомянутой symtableвещи, которые включают в себя несвязываемый код, такой как встроенные функции и общие определения, и .o, который совместим с MINGW (COFF) в Windows.Cygwin также совместим с mingw на уровне связывания (но время выполнения отличается и страшно).В любом случае, mingw32 / 64 является нашим эталонным gcc для Windows.
У PPU такая же проблема с версией, что и у DC Delphi, вероятно, по тем же причинам.Формат ppu отличается практически во всех основных выпусках.(то есть 2.0, 2.2, 2.4), и обычно меняется 2-3 раза в год в транке
Так что, хотя FPC в Windows использует собственные ассемблеры и компоновщики, генерируемые им файлы .o по-прежнему совместимы с mingw32. В целомВыходные данные FPC очень совместимы с gcc, и часто можно напрямую связать их со статическими библиотеками gcc, что позволяет, например, связывать библиотеки ссылок mysql и postgres в приложения с подходящей лицензией.(например, GPL). На 64-битном уровне они также должны быть совместимы, но это, вероятно, менее проверено, чем win32.
Текстовая среда IDE даже связывает весь отладчик GDB в виде библиотеки.GDB является одной из основных причин совместимости gcc в Windows.
Хотя замечания Барри о времени выполнения в целом верны и для FPC, возможно, будет немного легче обойти это.Это может потребовать вызова только определенных функций для инициализации FPC RTL из вашего кода запуска, и аналогично для финализации.Скомпилируйте минимальную программу FPC с помощью -al и просмотрите получившийся ассемблер (в файле .s, прежде всего, initializeunits и finalizeunits). Более того, RTL более гибок и, вероятно, легче сократить до минимума.
Конечнокак только вам также потребуются исключения для работы в пределах gcc <-> fpc, вам не повезло.FPC не использует SEH или какую-либо схему, совместимую с другими банкоматами.(в отличие от Delphi, который использует SEH, который, по крайней мере, теоретически должен дать вам преимущество, Барри?) OTOH, gcc может использовать свой собственный libunwind вместо SEH.
Обратите внимание, что соглашение о вызовах по умолчанию FPCна x86 есть Delphi-совместимый регистр, поэтому вам может понадобиться вставить соответствующие модификаторы cdecl (которые должны быть gcc-совместимыми) или даже установить их для целых модулей за один раз, используя {$ вызывает cdecl}
On * nixэто стандартный стандарт (например, модули apache), хотя я не знаю многих людей, которые делают это на win32.
О совместимости;FPC может компилировать пакеты, такие как Indy, Teechart, Zeos, ICS, Synapse, VST и более, с минимальными модами или без них.Уровни диалекта выпущенных версий - смесь D7 и выше, с акцентом на D7.Уровень диалекта медленно сползает к уровню D2006 в версиях магистрали.(с for in, аннотация класса и т. д.)