如果我使用gcc 4.1在x86 Linux上使用-fPIC进行编译,那么定义__PIC__将设置为1,预处理器可以在编译时对其进行操作。但是,在gcc 4.01下的OS / X上并非如此。是否有其他方法可以在OS / X上的编译时确定-fPIC的设置?
在OS / X下在预处理器级别查询编译标志的一般工具会更有帮助,但我找不到类似的东西。
答案 0 :(得分:1)
-fPIC
是OS X上的默认设置。在我的狡猾的旧OS X 10.4机器上的gcc 4.0.1确实定义了__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
$
选项在预处理完成后转储预处理程序定义。
e.g。从终端窗口:
-xc++
(我在那里指定了/dev/null
因为我正在预处理-xc
而不是带有指示语言变体的扩展名的文件。也可能是-xobjective-c
,{{1 }或-xobjective-c++
。)