gcc 4.1でx86 Linux上で-fPICを使用してコンパイルすると、__PIC__定義が1に設定され、コンパイル時にプリプロセッサがその機能を実行できます。しかし、gcc 4.01のOS/Xではそうではありません。 OS/Xでコンパイル時に-fPICの設定を決定する他の方法はありますか?OS/Xでコンパイル時にコンパイルフラグを決定する方法は?
OS/Xのプリプロセッサレベルでコンパイルフラグを問い合わせるための一般的な機能はさらに役立ちますが、そのようなものは見つかりませんでした。
gcc 4.1でx86 Linux上で-fPICを使用してコンパイルすると、__PIC__定義が1に設定され、コンパイル時にプリプロセッサがその機能を実行できます。しかし、gcc 4.01のOS/Xではそうではありません。 OS/Xでコンパイル時に-fPICの設定を決定する他の方法はありますか?OS/Xでコンパイル時にコンパイルフラグを決定する方法は?
OS/Xのプリプロセッサレベルでコンパイルフラグを問い合わせるための一般的な機能はさらに役立ちますが、そのようなものは見つかりませんでした。
-fPIC
は、OS Xのデフォルトです。gcc 4.0.1は、古いOS X 10.4マシンでは、__PIC__
と定義されています。または明示的にオフの場合は-fno-PIC
でオフになります。
コンパイルフラグの設定は、一般的にプリプロセッサにエクスポートされません。特定の特殊なケースを除いて、GCCターゲットによって異なる場合があります。
しかし、あなたは前処理が完了した後プリプロセッサ定義をダンプgcc
に-dM
オプションを使用して、任意のプラットフォーム上で、事前に定義されたプリプロセッサの定義にフラグを変更したときの効果を見ることができます。
ターミナルウィンドウから:
$ gcc -xc++ -dM -E /dev/null | sort > /tmp/defaults.txt
$ gcc -fno-PIC -xc++ -dM -E /dev/null | sort > /tmp/nopic.txt
$ diff /tmp/defaults.txt /tmp/nopic.txt
65d64
< #define __PIC__ 1
$
(私は前処理/dev/null
ではなく、言語のバリエーションを示して拡張子を持つファイルてるので、私はそこに-xc++
を指定したことも-xc
、-xobjective-c
または-xobjective-c++
である可能性があります。。)
ありがとう、それは非常に有用な情報です。私は.Sファイルを作成していると述べていたはずですが、gccをプリプロセッサとして実行したり、アセンブルしているときに、-fPICがデフォルトではないようです。さらに複雑なことには、プリプロセッサではなく、アセンブラのコマンドラインで-fPICを使用しました。 – Pat