与gcc静态链接时,如何仅包含用过的符号?

蒂姆·波斯特(Tim Post):

我正在部署一个用gcc 4.3.2-1.1(Debian)编译的小程序。该程序将部署在从Debain 5到最新的Fedora,Ubuntu,Slackware,Arch等虚拟机模板上。

该程序取决于Xen库中的某些符号,这些符号仅在不稳定的树中可用。因此,通过相应的软件包管理器在虚拟机模板上安装Xen的库无法解决我的直接问题。

在打包这些库的自己的版本之前,需要静态链接可执行文件。

默认情况下,gcc 4.3-x是否仅包括静态链接时实际使用的符号,还是我应该将其他优化标志传递给链接器?我知道静态链接是不好的,我只是在做临时工作。

SJ:

这个问题不仅与gcc有关,而且与ld(1)也有关。

默认情况下,gcc不会消除无效代码,您可以通过编译/链接可执行文件然后运行来进行检查

objdump -d a.out

它显示了可执行文件中的所有功能。

简单的“搜索”就给出了此链接

因此,要删除未使用的功能,您需要:

  • 使用“ -fdata-sections”进行编译以将数据保留在单独的数据节中,使用“ -ffunction-sections”进行编译以将函数保留在单独的节中,因此如果未使用它们,则可以将其(数据和函数)丢弃。
  • 链接“ --gc-sections”以删除未使用的部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除文件,但仅当它是符号链接时

在gcc的静态链接文件中找到可选符号?

使用静态构造函数链接dll时,如何解析未解析的外部符号?

如何查找不包含符号链接的文件?

当仅影响静态方法时,如何解决 C++ 中的链接器错误?

当路径包含符号链接时,如何在UNIX / Linux中将目录移回原位?

在MacOSX上进行静态链接时找不到符号

GCC链接静态库

gcc与静态库链接

使用GCC链接到静态库时遇到问题

如何在GCC中命名静态变量的符号?

多次包含仅标头库时出现重复的符号

如何搜索链接并仅保存包含特定数据的链接?

如何在gcc make中链接静态lib?

如何解决错误:无法符号链接lib / gcc / 4.9?

gcc链接静态库中未解析的符号的顺序是什么

链接到可执行文件时,如何强制将目标文件包含在静态库中?

链接链接静态(gSoap)库的共享库时,为什么会得到未定义的符号?

如何告诉Homebrew公式仅bin下的符号链接文件?

构建用于静态链接的gcc

如何命名专用于仅包含仅包含静态字段的类的命名空间?

如果GCC仅找到静态库而不是动态库,它是否求助于静态链接找到的文件?

仅当链接没有活动类别时,如何显示链接?

OS X链接器无法从仅包含变量的C文件中找到符号

如何创建仅包含指向其他 PPA 的链接的 PPA?

静态库中的符号有时链接到可执行文件,有时不链接

使用名称空间链接到静态库时,无法解析的外部符号

链接到共享库时,不会导出静态库中的符号

定义静态类字段时多个已定义符号的链接器错误