我想编译下面的代码:
#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之间的版本。
很高兴你解决了。