Могу ли я сказать 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
удалить неиспользуемые разделы.