Last Update 2020/11/02
-wrapperオプション
コンパイル中の全てのサブコマンド(cc1、as、...)の呼び出しにラッパープログラムを使用
テスト概要
ラッパープログラムを指定してコンパイルを実行
実行環境
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_wrapper.c(実行ファイルをsample_wrapperとしてコンパイル)
/* -wrapperオプション動作確認用ソースファイル sample_wrapper.c */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
printf("****************************************************************\n");
int i;
for (i=0; i<argc; i++)
{
printf("[%02d] %s\n", i, argv[i]);
}
printf("****************************************************************\n");
return 0;
}
ラッパープログラムを指定してコンパイルを実行
$ gcc -v sample.c -wrapper ./sample_wrapper,arg1,arg2 <--- ラッパープログラムと引数をコンマ区切りで記述
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr --enable-languages=c,c++ --disable-multilib ...
Thread model: posix
gcc version 8.2.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
./sample_wrapper arg1 arg2 /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.c ... -o /tmp/ccqmRxY4.s
ラッパープログラムとその指定引数以降にcc1とその引数がコマンドラインに並ぶ
****************************************************************
[00] ./sample_wrapper <--- 呼び出されたラッパープログラム
[01] arg1
[02] arg2 <--- ここまでが-wrapperオプションで指定した引数
[03] /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 <--- ここ以降、コンパイラ(cc1)のコマンドライン
[04] -quiet
[05] -v
[06] sample.c
[07] -quiet
[08] -dumpbase
[09] sample.c
[10] -mtune=generic
[11] -march=x86-64
[12] -auxbase
[13] sample
[14] -version
[15] -o
[16] /tmp/ccqmRxY4.s
****************************************************************
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
./sample_wrapper arg1 arg2 as -v --64 -o /tmp/ccxISLAK.o /tmp/ccqmRxY4.s
ラッパープログラムとアセンブラ(as)のコマンドライン
****************************************************************
[00] ./sample_wrapper
[01] arg1
[02] arg2
[03] as
[04] -v
[05] --64
[06] -o
[07] /tmp/ccxISLAK.o
[08] /tmp/ccqmRxY4.s
****************************************************************
COMPILER_PATH=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/:/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/:...
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/:/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/:...
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
./sample_wrapper arg1 arg2 /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 -plugin ...
ラッパープログラムとリンカ(collect2)のコマンドライン
****************************************************************
[00] ./sample_wrapper
[01] arg1
[02] arg2
[03] /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2
[04] -plugin
[05] /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/liblto_plugin.so
[06] -plugin-opt=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper
[07] -plugin-opt=-fresolution=/tmp/ccYYF3cq.res
[08] -plugin-opt=-pass-through=-lgcc
[09] -plugin-opt=-pass-through=-lgcc_s
[10] -plugin-opt=-pass-through=-lc
[11] -plugin-opt=-pass-through=-lgcc
[12] -plugin-opt=-pass-through=-lgcc_s
[13] --eh-frame-hdr
[14] -m
[15] elf_x86_64
[16] -dynamic-linker
[17] /lib64/ld-linux-x86-64.so.2
[18] /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crt1.o
[19] /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crti.o
[20] /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/crtbegin.o
[21] -L/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0
[22] -L/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib
[23] -L/lib/../lib
[24] -L/usr/lib/../lib
[25] -L/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../..
[26] /tmp/ccxISLAK.o
[27] -lgcc
[28] --as-needed
[29] -lgcc_s
[30] --no-as-needed
[31] -lc
[32] -lgcc
[33] --as-needed
[34] -lgcc_s
[35] --no-as-needed
[36] /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/crtend.o
[37] /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crtn.o
****************************************************************
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
$