我正在部署一个用gcc 4.3.2-1.1(Debian)编译的小程序。该程序将部署在从Debain 5到最新的Fedora,Ubuntu,Slackware,Arch等虚拟机模板上。
该程序取决于Xen库中的某些符号,这些符号仅在不稳定的树中可用。因此,通过相应的程序包管理器在虚拟机模板上安装Xen的库无法解决我的直接问题。
在打包这些库的自己的版本之前,需要静态链接可执行文件。
默认情况下,gcc 4.3-x是否仅包括静态链接时实际 使用的 符号,还是我应该将其他优化标志传递给链接器?我知道静态链接是不好的,我只是在做临时工作。
这个问题不仅与gcc有关,而且与ld(1)也有关。
默认情况下,gcc不会消除无效代码,您可以通过编译/链接可执行文件然后运行来进行检查
objdump -d a.out
它显示了可执行文件中的所有功能。
简单的“搜索”就给出了此链接。
因此,要删除未使用的功能,您需要: