Last Update 2022/11/29
-specs=ファイル
コンパイラが標準のspecファイルをデフォルトとして読み込んだ後に、ファイルの内容を上書き処理
ファイルは、gccドライバプログラムがcc1やldなどと連携をとる際の動作仕様を記述したもの
ファイルは、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
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言語のソースファイルと設定
.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'
$ エラー無しで正常終了