Loose-Info.com
Last Update 2022/11/29
TOP - 各種テスト - gcc - -specs=オプション

-specs=ファイル
コンパイラが標準のspecファイルをデフォルトとして読み込んだ後に、ファイルの内容を上書き処理
ファイルは、gccドライバプログラムがcc1やldなどと連携をとる際の動作仕様を記述したもの

テスト概要

・-specs= オプション無しでコンパイルを実行
FAIL 拡張子がオブジェクトファイルと判定されエラーが発生

・-specs=test.spec指定でコンパイルを実行
PASS 指定したspecファイルが読み込まれ、拡張子をCソースファイルと判定

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル


sample.ccc
/* -specs= オプション動作確認用ソースファイル */ #include <stdio.h> int main(void) { printf("-specs= オプション動作確認用ソースファイル\n"); return 0; }

test.spec
拡張子「.ccc」をC言語のソースファイルと設定
.ccc: @c

動作テスト


-specs= オプション無しでコンパイルを実行
$ gcc -v sample.ccc <--- -specs= オプション無しでコンパイルを実行 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper 拡張子によりオブジェクトファイルと判定され直接リンカに処理される /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... sample.ccc ... sample.ccc: file not recognized: file format not recognized <--- オブジェクトファイルではないのでエラー発生 collect2: error: ld returned 1 exit status $

-specs=test.spec指定でコンパイルを実行
$ gcc -v -specs=test.spec sample.ccc <--- -specs=test.spec指定で実行 Using built-in specs. Reading specs from test.spec <--- test.specの読み込み COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.ccc ... -o /tmp/ccalkQ4G.s ^^^ sample.cccのコンパイル as -v --64 -o /tmp/cctq2rfg.o /tmp/ccalkQ4G.s <--- アセンブル /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... <--- リンク COLLECT_GCC_OPTIONS='-v' '-specs=test.spec' '-mtune=generic' '-march=x86-64' $ エラー無しで正常終了