Solution for gcc “x86_64-linux-gnu/crti.o: unrecognized relocation (0x2a) in section `.init'” on Ubuntu 16.04
先日Ubuntuを14.04から16.04に更新した。すると,gccでC言語のソースコードをコンパイルしようとすると以下のエラーがでるようになってしまった。
cat << EOF > hi.c
#include <stdio.h>
int main(void){
puts("HI");
return 0;
}
EOF
gcc -o hi.{exe,c}/home/senooken/local/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o: unrecognized relocation (0x2a) in section `.init'
/home/senooken/local/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status原因を調べていると以下のページにたどり着いた。
この投稿でPascal Obryの回答を参考にすると,どうやらコンパイルに使ったgccとリンカldのバージョンなどの整合性が取れていないことが原因のようだ。
実際に以下のコマンドでldがどこにあるか確認した。
which ld/home/senooken/local/bin/ldどうやら,自分でローカル環境にインストールしていたldを使っていたようだ。
確認してみると,ローカルでbinutils-2.25をインストールしていて,gccでのリンク時にこのldが使われていたのが原因だった。binutils-2.25をアンインストールしたら解決した。
gccはOSのシステムと密接になっているので,注意しよう。
