gcc:如何删除未使用的未定义符号?

时间:2012-05-02 16:08:36

标签: gcc

这是一些C ++测试代码:

__attribute__((visibility("hidden"))) void foo()
{
   int fd = fopen("data1", "rb");
   printf ("%d", fd);
}

所有其他代码都不调用函数'foo'和函数'fopen'

然后我使用gcc选项-ffunction-sections将代码编译为so文件。

我认为,函数foo符号和foo二进制代码并没有包含在so文件中。

但问题是,我认为符号'fopen'不应该是符号表。 ps:我可以确保只有函数'foo'使用'fopen'。 实际上并非如此,当我使用命令nm时,我发现了'f'符号'fopen'。

gcc如何运作? 并且有gcc其他编译选项发现,符号'fopen'不使用,并删除'fopen'符号。

1 个答案:

答案 0 :(得分:0)

问题是,编译器不知道,以后会使用这些符号。

你可以在编译时告诉你你给了他整个程序,所以如果你的程序没有调用该函数,那么没人会。

编译选项为-fwhole-program