2011-03-31 3 views
1

Если я скомпилирую с -fPIC на x86 Linux с gcc 4.1, тогда для определения __PIC__ установлено значение 1, и препроцессор может действовать во время компиляции. Однако в OS/X под gcc 4.01 это не так. Есть ли другой способ определить настройку -fPIC во время компиляции OS/X?Как определить флаги компиляции во время компиляции на OS/X?

Общим средством для запроса флагов компиляции на уровне препроцессора под OS/X было бы еще более полезно, но я не смог найти ничего подобного.

ответ

1

-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++.).

+0

Спасибо, это очень полезная информация. Я должен был упомянуть, что я создаю файл .S, и получается, что -fPIC, по-видимому, не является значением по умолчанию при запуске gcc в качестве препроцессора или при сборке. И чтобы усложнить ситуацию, у меня был -fPIC в командной строке для ассемблера, но не для предварительного процессора. – Pat

Смежные вопросы