我想知道是否可以告诉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,它不允许创建库,但是想省略未使用的源文件,具体取决于构建配置。
答案 0 :(得分:3)
我不知道它是否可以在AVR上使用,但您可以要求GCC在编译时使用-ffunction-sections -fdata-sections
将每个符号放在其自己的部分中。然后,在链接步骤中,您可以使用-Wl,--gc-sections
要求ld
删除未使用的部分。