我可以告诉gcc/ld排除未使用的模块吗?
我想知道我是否可以告诉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
resp。包括c.o
。
gcc a.o b.o c.o
我可以通过任何方式告诉gcc忽略未使用的模块而不将它们放入库中吗?
我正在编程一个AVRμC并使用AVR Studio,它不允许创建库,但希望省略未使用的源文件,具体取决于构建配置。
我不知道在AVR上是否有可能,但你可以要求GCC在编译时使用-ffunction-sections -fdata-sections
将每个符号放在它自己的部分。然后在链接步骤中,您可以使用-Wl,--gc-sections
请求ld
删除未使用的部分。
听起来不错。我刚刚找到了一个开关,可以启用这个“gc-sections”。它是否也在没有'-ffunction-sections -fdata-sections'的每个模块的基础上工作?我不想让ISR程序被抛出...... – glglgl 2012-02-24 14:54:19
@glglgl根据它的名字,它只是每个部分,而不是每个模块。所以如果你的ISR没有被其他代码中的任何东西引用,它将被链接器丢弃。 – ydroneaud 2012-02-24 14:56:49
哦,我认为每个模块都有一些自己的部分被丢弃,然后......经过一些测试后,事实证明这确实是这种情况。 – glglgl 2012-02-24 15:10:01
如果您明确要求GCC添加c.o,您不应该对此感到惊讶:) – ydroneaud 2012-02-24 14:38:53
那不是我,那是AVR Studio询问它的原因:-) – glglgl 2012-02-24 14:53:10