OpenSSL编译错误:'ENGINE'重新声明为不同类型的符号

时间:2015-12-17 07:08:10

标签: c openssl

我必须在linux系统上编译一些遗留的C代码和OpenSSL。 我已经在OpenSSL上运行了make,它看起来很不错。

然后我开始在遗留代码中包含OpenSSL的CMAC.h。

#include "ssl\include\openssl\cmac.h"

(这是我在代码中关于OpenSSL的唯一一行)。

在编译期间(具有上述include语句的遗留代码)现在我收到以下错误: “OpenSSL编译错误:'ENGINE'重新声明为不同类型的符号”

是的,确实如此,遗留代码有'ENGINE'的定义,但我不允许更改它。现在的问题是:如何保持两种定义?我想某种名称空间或类似的东西,但我不是在C上经验丰富吗?请提出建议,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

一个选项是分隔代码,代码在不同的源文件中使用ENGINE的不同定义,并且只包含其中一个的定义。这应避免冲突。

不幸的是,C并不知道类似名称空间的构造。

答案 1 :(得分:0)

  

遗留代码有“发动机”的定义。但我不允许   更改。现在的问题是:如何保持两种定义?

好吧,如果您不允许更改遗留代码的定义,那么只剩下一件事(如果您不能分离编译单元):更改OpenSSL&# 39;定义。

#define ENGINE  SSLENGINE
#include "ssl\include\openssl\cmac.h"
#undef  ENGINE

请注意,如果旧版定义是宏,则必须修改此方法。