如何检查哪个 #define 被编译成二进制文件
How do I check which #define was compiled into binary?
由于某种原因,错误的opensslv.h标头是通过cmake包含的,或者我认为是这样。我想确定并打印出"OPENSSL_VERSION_NUMBER"的哪个值被编译到我的二进制文件中。我该怎么做?
正如@Galik的注释所提到的,如果可以编辑源,则可以打印出宏的值。
如果你只有一个二进制文件,那么它就会变得困难,因为预处理器将在编译器看到源代码之前将宏名称替换为其值。因此,二进制文件不包含任何返回到原始宏名称的"链接"。
一些编译器(根据我的经验,clang 做得最好)可以在启用调试符号的情况下构建时将此类信息嵌入二进制文件中,以便它可以打印更好的错误消息并使调试更有效。但是在没有调试符号的优化二进制文件中,您几乎不走运。也就是说,除非您开始在知道使用宏的位置周围挖掘二进制文件,并且知道它可能需要的潜在值。然后你也许可以把它挖出来。
相关文章:
- 二叉排序树无法编译
- 编译时未启用intel oneApi CUDA支持
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 除了使用 #define 进行条件编译之外,还有其他选择吗?
- #define xyz在#include预编译标题之前
- visual在源代码中是否有预定义的#define或其他方式来了解它是为C++/CX Windows运行时编译的
- 在#define中编译时出错
- 使用 #pragma message() 打印编译期间 #define 的完整评估结果
- 根据编译时常量,使用相同的标识符 #define 或类型定义是否被认为是可接受的做法?
- 使用Makefile编译的预处理器指令(#define)列表
- 找到中断编译的#define
- 如何避免公共头中#define编译时间过长
- 如何检查哪个 #define 被编译成二进制文件
- 如何在编译时检查像"#define VERSION 3.1.4"这样的值?
- 根据 #define 动态编译文件
- numpy ctype 如果不是每次都重新编译,"dynamic module does not define init function"错误
- #define在预编译头文件中无法识别.mm文件