
FreeBSD で GCC を実行しようとすると、次のエラーが発生します。
% gcc
ar: unrecognized option `--plugin'
usage: ar -d [-Tjsvz] archive file ...
ar -m [-Tjsvz] archive file ...
ar -m [-Tabijsvz] position archive file ...
ar -p [-Tv] archive [file ...]
ar -q [-TcDjsvz] archive file ...
ar -r [-TcDjsuvz] archive file ...
ar -r [-TabcDijsuvz] position archive file ...
ar -s [-jz] archive
ar -t [-Tv] archive [file ...]
ar -x [-CTouv] archive [file ...]
ar -V
バイナリ パッケージを使用して次のバージョンの GCC をインストールしました。
% pkg info gcc
gcc-4.7.3_1
Name : gcc
Version : 4.7.3_1
Installed on : Wed Jun 25 15:22:58 CEST 2014
Origin : lang/gcc
Architecture : freebsd:10:x86:64
Prefix : /usr/local
Categories : lang java
Licenses : GPLv3RLE and GPLv3
Maintainer : [email protected]
WWW : http://gcc.gnu.org/
Comment : GNU Compiler Collection 4.7
Options :
BOOTSTRAP : off
JAVA : on
移植版もインストールしましたが、結果は同じでした。
一体何が間違っているのでしょうか?
答え1
FreeBSD 10以降カラン新しいデフォルトのコンパイラです。
Clang を使用してコードをコンパイルすることもできますが、行ったように GCC バージョンをインストールする必要があります。
しかし、Clang に切り替える前は、FreeBSD は GCC のバージョン 4.2 を使用しており、この GCC のバイナリは であった/usr/bin/gcc
ため、GCC の新しいポートではバイナリに別の名前を付ける必要がありました。
そのため、すべての GCC ポートには と呼ばれるバイナリがあり/usr/local/bin/gccXY
、 はXY
バージョン番号です。
FreeBSD に gcc4.7 をインストールすると、/usr/local/bin/gcc
古い動作のおかげで、代わりに /usr/local/bin/gcc47 が取得されます。
簡単に言うと、GCC 4.7 でコードをコンパイルする場合は、gcc47
ではなく を使用する必要がありますgcc
。
しかし、コードをさまざまなコンパイラでコンパイルして、コードがコンパイラに依存しているかどうかを確認することは常に良い考えなので、Clang を試してみるとよいかもしれません。コンパイルできない場合は、コードが壊れているか、コンパイラのバグが見つかった可能性があります。これは素晴らしいことです。