Openssl 如何修复evp\u cipher\u ctx和std::pair<;t1、t2>;::第二个不完全类型错误?

Openssl 如何修复evp\u cipher\u ctx和std::pair<;t1、t2>;::第二个不完全类型错误?,openssl,std-pair,evp-cipher,Openssl,Std Pair,Evp Cipher,在picco目录下运行以下docker命令时以及克隆MPC SoK/frameworks后,我收到了以下编译错误: “struct evp\u cipher\u ctx”的转发声明 “std::pair::second”的类型不完整 “EVP_CIPHER_CTX en”具有初始值设定项,但类型不完整 我见过许多与一个或多个特定错误相关的github和stack交换票据和帖子,但没有一个真正为它们提供了可行的解决方案,例如: 第一个和第三个错误似乎是由于Openssl中的更新造成的

在picco目录下运行以下docker命令时以及克隆MPC SoK/frameworks后,我收到了以下编译错误:

  • “struct evp\u cipher\u ctx”的转发声明
  • “std::pair::second”的类型不完整
  • “EVP_CIPHER_CTX en”具有初始值设定项,但类型不完整
我见过许多与一个或多个特定错误相关的github和stack交换票据和帖子,但没有一个真正为它们提供了可行的解决方案,例如:

第一个和第三个错误似乎是由于Openssl中的更新造成的,但是我试着用Openssl的1.0.1、1.0.2、1.1.0和1.1.1运行新的Ubuntu16.04和18.04虚拟机,在Mac OSX High Sierra上用Openssl 1.0.2运行新的Ubuntu16.04和18.04虚拟机,都有相同的故障点,都有相同的三类错误

我还尝试了手动进入的解决方案,将EVP_CIPHER_CTX变量更改为指针,并使用了相关的释放函数。这也不管用


我想知道以前是否有人看到并成功地修复了这些错误,如果有,他们做了什么,在哪台机器上,以及可能的话使用了哪些依赖项?

查看您提到的存储库,
Dockerfile
从以下内容开始:

FROM ubuntu:latest
WORKDIR /root
RUN apt-get update && apt-get install -y \
  bison \
  flex \
  g++ \
  git \
  libgmp-dev \
  libssl-dev \
  make \
  python \
  vim
安装的软件包之一是
libssl dev
,它没有版本指示。现在
ubuntu:latest
是最新的ubuntults,目前一些
openssl1.1
版本是标准版。这破坏了你的身材,你已经知道了


看起来您唯一需要更改的是选择
Dockerfile
中的
libssl-dev
包,您必须将其替换为
libssl1.0-dev
。这将安装OpenSSL的
1.0.2
版本,代码就是为其编写的。我在上面找到了
1.0
版本化的openssl软件包的名称。

你能包括你克隆的GitHub repo的链接吗?@ReinierTorenbeek我已经添加了到该repo的链接。谢谢,这很有帮助——请看我的答案。@RinierTorenbeek非常感谢你的帮助!不过,我仍然感到惊讶的是,当我将新vm的openssl版本降级到1.0.2时,代码没有编译。当我确认降级后使用的版本确实是1.0.2时,我很高兴。您的意思是说您运行了实际的
install.sh
脚本来在您的虚拟机中构建内容吗?或者你的意思是说,
docker build-t picco.
命令仍然失败?@z.karl:OK。除非更改
Dockerfile
,否则docker命令将不会成功,因为整个构建都发生在docker内部,而在docker外部执行的任何操作都不会产生太大的效果。我不知道为什么在降低OpenSSL等级后,在VM中运行
install.sh
可能不起作用——这可能是另一个问题:-)
FROM ubuntu:latest
WORKDIR /root
RUN apt-get update && apt-get install -y \
  bison \
  flex \
  g++ \
  git \
  libgmp-dev \
  libssl-dev \
  make \
  python \
  vim