用gcc静态编译错误

我想编译下面的代码:

#include<stdio.h> void func() { printf("In function\n"); return ; } int main() { printf("In mains\n"); func(); return 0; } 

使用gcc -static -o try try.c但得到以下错误:

 /usr/bin/ld: error: hidden symbol '__ehdr_start' is not defined locally /usr/bin/ld: error: hidden symbol '__ehdr_start' is not defined locally /usr/bin/ld: error: hidden symbol '__ehdr_start' is not defined locally /usr/bin/ld: error: hidden symbol '__ehdr_start' is not defined locally /usr/bin/ld: error: hidden symbol '__ehdr_start' is not defined locally collect2: error: ld returned 1 exit status 

我做错了什么?

我有gcc version 4.7.2 (Debian 4.7.2-5)gcc version 4.7.2 (Debian 4.7.2-5)

看看Binutils发布 。 看起来如果您有binutils 2.24.51.0.2或更早的版本,您可能需要更新以避免使用__ehdr_start符号的错误。 具体来说,它看起来像从binutils 2012 0806更新增加了对ELF文件头的__ehdr_start符号的支持。 然后在2.24.51的更新中修正了一个与__ehdr_start相关的bug

我有版本2.23.2在openSuSE,我没有看到任何问题,我有一个Archlinux盒2.24,没有看到问题。 所以问题似乎版本特定于binutils 2012 0806版本和2.24.51之间的版本。

很高兴你解决了。