2016-10-17 7 views
2

RHEL7でgccコンパイラ4.8.5を使用してレガシーコードをコンパイルしています。すべてのCおよびC++ファイルには、gccおよびg ++コンパイルのデフォルトフラグの1つとして「-unsigned」があります。コンパイラはこのオプションを受け入れ、正常にコンパイルします。しかし、私はgccのマニュアルやオンラインのどこでもこのオプションのドキュメントを見つけることができません。誰でもこのオプションが何であるか知っていますか?私はコードを移植する必要があり、このコンパイラオプションを移植する必要があるかどうか混乱しています。gccコンパイラのオプション "-unsigned"とは何ですか?

+0

レガシーと言えば、どのようにレガシーですか?もともとどのコンパイラが書かれていたのか分かっていれば、古いマニュアルでバイセクトを開始することもできます。最初のGCCのバージョンは2.95.3であり、 '-unsigned'もありません。 –

+2

私が知っている限り、GCCでは[spec files](https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html)を使ってコマンドラインパラメータを追加することができます。彼らはカスタム仕様ファイルを使用しているかどうか試してみることができます –

答えて

4

私はそれがMakefileやコードをコンパイルするのに使われている間違いであったと思っています。

gccは-unsignedオプションをサポートしていません。しかし、それはリンカにオプションを渡す行い、およびGNU ldは-uオプションがあります:

'を-u SYMBOL'
は '--undefined = SYMBOL'
フォースSYMBOLとして出力ファイルに入力します定義されていない シンボル。これを行うと、たとえば、標準のライブラリから追加の モジュールをリンクすることができます。追加の未定義シンボルを入力するには、異なるオプション引数を使用して '-u'が繰り返されることがあります( )。 このオプションは 'EXTERN'リンカースクリプトコマンドに相当します。

シンボル名は-uの間のスペースは省略可能です。

したがって、符号なしの型で何かを行う意図があったかもしれませんが、少なくとも現代版のgccの場合は、出力ファイルに定義されていないシンボルとしてnsignedを入力する必要があります。

これは私がやったクイックテスト(小さな "hello、world"プログラムのコンパイルと実行)では効果がないようです。プログラムが正しく実行され、nm helloの出力が含まれています:異なるシステム上のgcc(2.95.2)の古いバージョンで

    U nsigned 

、私は未定義のシンボルに関する致命的なリンク時エラーが発生します。

+0

笑............ :) –

+0

gcc 2.95が正常に動作していますか? 0。oニースが見つかりました! :) –

+1

@BaummitAugen:Solaris 9.を実行しているSPARC(私のものではなく、私がアクセスできるシステム)。 –

0

私は、プログラムが-funsigned-charでコンパイルされていると考えています。私はこれが代わりに-unsignedであったかどうか、おそらく恐竜の時代に戻ったのかどうか、そしておそらくGCCは実際には依然としてそのスペルに留意しているのかどうかわかりません。このマニュアルから知る方法はありません。なぜなら、それが文書化されていれば、文書化されていない機能なのです。

私は元の著者にここに意図を尋ねるでしょう、なぜなら彼らは文書化には合っていないからです。

+2

明らかにそうではない、または少なくともそれ以上は機能しません。 http://melpon.org/wandbox/permlink/XXTmWrJ6ggmQa01h vs http://melpon.org/wandbox/permlink/S8E1jAFnmDOb4ssR –

+0

@BaummitAugen:脇の下として、下位の「0」は何ですか? o.O –

+0

gccの戻り値私は信じています。コンパイルが失敗すると '1 'になります。 –

関連する問題