这是一些 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 时,我发现了 'fopen' 的 'U' 型符号。
gcc 是如何工作的?并有 gcc 其他编译选项发现,符号 'fopen' 没有使用,并删除 'fopen' 符号。