c++ - 如何检查哪个#define 被编译成二进制文件?

标签 c++ linux

出于某种原因,错误的 opensslv.h header 正在通过 cmake 包含,或者我认为是这样。我想确定并打印出“OPENSSL_VERSION_NUMBER”的哪个值被编译到我的二进制文件中。 我该怎么做?

最佳答案

正如@Galik 的评论所提到的,如果您可以编辑源代码,则可以打印出宏的值。

如果您只有一个二进制文件,那么它会变得很困难,因为预处理器会在编译器看到源代码之前用它的值替换宏名称。因此二进制文件不包含任何返回原始宏名称的“链接”。

某些编译器(根据我的经验,clang 做得最好) 可以在启用调试符号的情况下将此类信息嵌入到二进制文件中,以便打印更好的错误消息并使调试更有效。 但是在没有调试符号的优化二进制文件中,你几乎要倒霉了。也就是说,除非您开始围绕您知道使用宏的位置以及您知道它可能采用的潜在值的位置对二进制文件进行反汇编。然后你可能能够把它挖出来。

关于c++ - 如何检查哪个#define 被编译成二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357780/

相关文章:

c++ - 获取回调函数的地址以在C++中动态调用

linux - 如何创建不带参数 $1 和 $2 的字符串=$*

linux - 以更好的方式分配变量值

c++ - Linux下视频文件+片段着色器

c++ - 我怎样才能得到一个函数来调用调用它的函数?

c++ - 标题保护 C++ 的“类”类型重新定义错误

c++ - 我可以使用 Google NaCl 访问文件系统吗?

C - 创建 n 个线程

linux - 如何使用 ESXi 5.1 运行/测试 VMware Perl SDK?

C++ 在哪里定义全局变量(链接器错误 : Symbol already defined)