【发布时间】:2014-01-22 18:18:50
【问题描述】:
是否可以检查编译标志是否在编译时设置为 gcc 下的预处理器指令?更准确地说,我想检测是否设置了-rdynamic 链接器标志?
【问题讨论】:
-
你为什么要问?干什么用的?
-
请编辑您的问题以解释更多。
标签: c++ linux gcc c-preprocessor
是否可以检查编译标志是否在编译时设置为 gcc 下的预处理器指令?更准确地说,我想检测是否设置了-rdynamic 链接器标志?
【问题讨论】:
标签: c++ linux gcc c-preprocessor
-rdynamic 不是编译器 标志,而是linker one。回想一下 gcc 只是一个驱动程序,它启动正确的编译器 cc1、汇编器 as、链接器 ld 等等...尝试将 -v 传递给 gcc 以了解它正在启动什么.
我建议您在传递 -rdynamic 时通常将一些适当的预处理器 -Dwith_rdynamic 传递给编译器。这通常是make 的问题(即编写一些好的代码Makefile ...)
您可能可以在生成的可执行文件上使用nm -D 来检查它是否与-rdynamic 链接。或者你可以使用(在你的程序中)dlopen(3) 和 NULL 路径,然后使用 dlsym(3) 一些符号,等等。
我不明白你为什么真的需要检查-rdynamic:当需要它时,你很快就会注意到你错过了它!
【讨论】:
-rdynamic,为什么您图书馆的用户会不高兴?请准确解释原因(通过编辑和改进您的问题)!
虽然我不能说绝对不,但我希望不会。
使用以下命令查看 gcc 和 g++ 编译器支持的预定义宏
这也可能有帮助。
【讨论】: