Помимо использования -nostdlib
и связывания crt1.o -lc -lgcc
самостоятельно, есть ли простой способ запретить gcc связывать crtbegin[S].o
и crtend[S].o
? Эти файлы не такие большие, но я пытаюсь создать небольшие двоичные файлы и хотел бы удалить бесполезный код поддержки C ++, который не нужен для программ на Си. (Предположительно, gcc связывает их даже для программ на C в случае, если вы используете библиотеку C ++ с глобальными переменными объектов. Я избавлю всех от разговоров о том, как следует генерировать безопасные одноразовые вызовы инициализации везде, на которые ссылается глобальный объект Модули C ++ вместо инициализации глобальных объектов до main
...)
Я не был бы против взлома файла gcc specs
, чтобы связывание файлов поддержки C ++ зависело от того-то и того-то, но я не уверен, как бы я это сделал. Возможно, уже есть хороший способ?