我必须在linux系统上编译一些遗留的C代码和OpenSSL。 我已经在OpenSSL上运行了make,它看起来很不错。
然后我开始在遗留代码中包含OpenSSL的CMAC.h。
#include "ssl\include\openssl\cmac.h"
(这是我在代码中关于OpenSSL的唯一一行)。
在编译期间(具有上述include语句的遗留代码)现在我收到以下错误: “OpenSSL编译错误:'ENGINE'重新声明为不同类型的符号”
是的,确实如此,遗留代码有'ENGINE'的定义,但我不允许更改它。现在的问题是:如何保持两种定义?我想某种名称空间或类似的东西,但我不是在C上经验丰富吗?请提出建议,非常感谢任何帮助。
答案 0 :(得分:0)
一个选项是分隔代码,代码在不同的源文件中使用ENGINE
的不同定义,并且只包含其中一个的定义。这应避免冲突。
不幸的是,C并不知道类似名称空间的构造。
答案 1 :(得分:0)
遗留代码有“发动机”的定义。但我不允许 更改。现在的问题是:如何保持两种定义?
好吧,如果您不允许更改遗留代码的定义,那么只剩下一件事(如果您不能分离编译单元):更改OpenSSL&# 39;定义。
#define ENGINE SSLENGINE
#include "ssl\include\openssl\cmac.h"
#undef ENGINE
请注意,如果旧版定义是宏,则必须修改此方法。