Могу ли я сказать gcc / ld исключить неиспользуемые модули? - PullRequest
1 голос
/ 24 февраля 2012

Хотелось бы узнать, могу ли я сказать gcc / ld об исключении неиспользуемых модулей для помещения в выходной файл.

Предположим, у меня есть модули a.c, b.c и c.c. a.c и b.c зависят друг от друга, один из них содержит main(), и по каким-либо причинам ни одна из частей c.c не имеет ссылки.

gcc -c a.c
gcc -c b.c
gcc -c c.c

Если я соберу материал в библиотеку, никакой код из c.c не будет выводиться:

ar rcs abc.a a.o b.o c.o
gcc abc.a

Но если я передам файлы .o непосредственно в gcc, код из c.c соответственно c.o включено.

gcc a.o b.o c.o

Могу ли я, в любом случае, сказать gcc не использовать неиспользуемые модули, не помещая их в библиотеку?

Я программирую AVR µC и использую AVR Studio, которая не позволяет создавать библиотеки, но хотела бы опустить исходные файлы, которые не используются, в зависимости от конфигурации сборки.

1 Ответ

3 голосов
/ 24 февраля 2012

Я не знаю, возможно ли это на AVR, но вы могли бы попросить GCC поместить каждый символ в отдельный раздел, используя -ffunction-sections -fdata-sections во время компиляции. Затем на шаге ссылки вы можете использовать -Wl,--gc-sections, чтобы попросить ld удалить неиспользуемые разделы.

...