是否有可能在编译时检测gcc编译标志为宏?

时间:2014-01-22 18:18:51

标签: c++ linux gcc c-preprocessor

是否可以检查编译时是否在编译时将其设置为gcc下的预处理程序指令?更确切地说,我想检测是否设置了-rdynamic链接器标志?

2 个答案:

答案 0 :(得分:4)

-rdynamic不是编译器标志,而是linker one。回想一下gcc只是一个驱动程序,它启动编译器cc1,汇编程序as,链接器ld等...尝试传递-vgcc了解它的起源。

我建议你在传递-Dwith_rdynamic时传统上将一些适当的预处理器-rdynamic传递给编译器。这通常是make的问题(即代码有些好Makefile ...)

您可能可以在生成的可执行文件上使用nm -D来检查它是否与-rdynamic链接。或者您可以使用(在您的计划中)dlopen(3)使用NULL路径,然后使用dlsym(3)某些符号等。

我无法弄清楚为什么你真的需要检查-rdynamic:当需要时,你会很快注意到你错过了它!

答案 1 :(得分:0)

虽然我不能说绝对没有,但我不期待。

使用以下命令查看gcc和g ++编译器支持的预定义宏

  • gcc -dM -E -x c / dev / null
  • g ++ -dM -E -x c ++ / dev / null

这可能也有帮助。

http://sourceforge.net/p/predef/wiki/Home/