2

我想知道我是否可以告诉 gcc/ld 省略未使用的模块,不要将其放入输出文件中。

假设我有模块a.cb.cc.ca.c并且b.c相互依赖,其中一个包含 a main(),并且由于任何原因,c.c都没有引用 of 的任何部分。

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,它不允许创建库,但想省略未使用的源文件,具体取决于构建配置。

4

1 回答 1

3

我不知道在 AVR 上是否可行,但您可以要求 GCC-ffunction-sections -fdata-sections在编译时使用将每个符号放在其自己的部分中。然后在链接步骤,您可以使用-Wl,--gc-sections要求ld删除未使用的部分。

于 2012-02-24T14:46:02.687 回答