我正在部署一个用gcc编译的小程序,4.3.2-1.1(Debian)。该程序将部署在虚拟机模板上,范围从Debain 5到前沿的Fedora,Ubuntu,Slackware,Arch等。
该程序依赖于Xen库中的某些符号,这些符号仅在不稳定的树中可用。因此,通过虚拟机模板上的相应软件包管理器安装Xen的库无法解决我的直接问题。
在我打包这些库的自己版本之前,我需要静态链接可执行文件。
gcc 4.3-x默认情况下只包含静态链接时实际使用的符号,还是有另一个我应该传递给链接器的优化标志?我知道静态链接很糟糕,我只是作为一个临时工作。
答案 0 :(得分:18)
此问题不仅与gcc有关,也与ld(1)有关。
默认情况下,gcc不会消除死代码,您可以通过编译/链接可执行文件然后运行
来检查 objdump -d a.out
显示可执行文件中的所有函数。
简单的“谷歌搜索”给出link。
因此,要删除未使用的函数,您需要: