使用GCC进行编译时-DPIC
究竟做了什么,何时真的有必要?
我发现-fpic
和-fPIC
会生成与位置无关的代码。但我找不到关于-DPIC
的任何信息。
答案 0 :(得分:3)
这只是一个预处理器宏定义。 GCC手册说:
-D
NAME
将
NAME
预定义为宏,定义为1
。
-D
NAME=DEFINITION
DEFINITION
的内容被标记化并处理,就像它们一样 在#define
指令的翻译阶段三期间出现。
如果您的源代码关心它是否被编译为与位置无关的代码,那么这可能很有用。例如:
#ifdef PIC
/* ... */
#endif