Могу ли я сказать gcc/ld исключить неиспользуемые модули?

Я хотел бы знать, могу ли я сказать 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 ответ

Решение

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

Другие вопросы по тегам