Есть ли простой способ заставить gcc пропустить crtbegin.o / crtend.o? - PullRequest
12 голосов
/ 11 ноября 2010

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

Я не был бы против взлома файла gcc specs, чтобы связывание файлов поддержки C ++ зависело от того-то и того-то, но я не уверен, как бы я это сделал. Возможно, уже есть хороший способ?

Ответы [ 2 ]

7 голосов
/ 30 декабря 2010
gcc -wrapper sh,-c,'z= ; for i ; do [ "$z" ] || set -- ; z=1 ;
    case "$i" in *crtbegin*.o|*crtend*.o) ;; *) set -- "$@" "$i" ;; esac ;
    done ; exec "$0" "$@"'
4 голосов
/ 11 ноября 2010

Я думаю, вам нужна опция -nostartfiles. В любом случае это то, что мне нужно для встраиваемых вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...