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