Пожалуйста, обратите внимание, что пользователь заблокирован
Представлен набор патчей для GCC, позволяющий генерировать исполняемые файлы в формате APE (Actually Portable Executable), которые при связывании приложений со стандартной Си-библиотекой Cosmopolitan дают возможность создавать универсальные сборки приложений, запускаемые в разных операционных системах. Исполняемый файл в формате APE не привязан к отдельным платформам и может быть запущен в Linux, FreeBSD, macOS, OpenBSD, NetBSD и Windows.
Переносимость обеспечивается при помощи библиотеки Cosmopolitan, которая предоставляет универсальную обвязку над системными вызовами различных операционных систем. Формат APE основан на совмещении специфичных для разных операционных систем сегментов и заголовков (PE, ELF, MACHO, OPENBSD) в одном файле. В качестве примеров программ, которые могут быть собраны с библиотекой Cosmopolitan для одновременного выполнения в разных ОС, отмечены bash, curl, git, ninja, lua, cpython и gcc.
Патчи добавляют в GCC 11.2 новый флаг "-fportcosmo", упрощающий перевод программ, написанных на языке Си, на использование библиотеки Cosmopolitan. В частности, патчи автоматизируют решение проблем с выражениями switch и инициализацией структур, которые при сборке с Cosmopolitan в обычном GCC приводят к выводу ошибок и раньше требовали ручного изменения кода, так как макросы, подобные EINVAL, не являются константами в Cosmopolitan, а использование не констант в static struct, const struct и switch...case недопустимо. Код предложенных изменений опубликован под лицензией ISC (упрощённый вариант MIT/BSD).
Источник: opennet.ru
Переносимость обеспечивается при помощи библиотеки Cosmopolitan, которая предоставляет универсальную обвязку над системными вызовами различных операционных систем. Формат APE основан на совмещении специфичных для разных операционных систем сегментов и заголовков (PE, ELF, MACHO, OPENBSD) в одном файле. В качестве примеров программ, которые могут быть собраны с библиотекой Cosmopolitan для одновременного выполнения в разных ОС, отмечены bash, curl, git, ninja, lua, cpython и gcc.
Патчи добавляют в GCC 11.2 новый флаг "-fportcosmo", упрощающий перевод программ, написанных на языке Си, на использование библиотеки Cosmopolitan. В частности, патчи автоматизируют решение проблем с выражениями switch и инициализацией структур, которые при сборке с Cosmopolitan в обычном GCC приводят к выводу ошибок и раньше требовали ручного изменения кода, так как макросы, подобные EINVAL, не являются константами в Cosmopolitan, а использование не констант в static struct, const struct и switch...case недопустимо. Код предложенных изменений опубликован под лицензией ISC (упрощённый вариант MIT/BSD).
Источник: opennet.ru