-fPIC
по умолчанию используется на OS X. gcc 4.0.1 на моей жестокой старой машине OS X 10.4 определяет __PIC__
; или, когда он явно отключен с -fno-PIC
, это не так.
Установки флагов компиляции обычно не экспортируются в препроцессор, за исключением определенных особых случаев, которые могут различаться в разных целях GCC.
Но вы можете увидеть последствие изменения флагов на предопределенных определениях препроцессора, на любой платформе, используя опцию -dM
для gcc
, который сваливает определение препроцессора после предварительной обработки завершена.
например. из окна терминала:
$ 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
$
(я указал -xc++
там, потому что я предобработки /dev/null
, а не файл с расширением, которое указывает вариант языка, который также может быть -xc
, -xobjective-c
или -xobjective-c++
.).
Спасибо, это очень полезная информация. Я должен был упомянуть, что я создаю файл .S, и получается, что -fPIC, по-видимому, не является значением по умолчанию при запуске gcc в качестве препроцессора или при сборке. И чтобы усложнить ситуацию, у меня был -fPIC в командной строке для ассемблера, но не для предварительного процессора. – Pat