【问题标题】:How might one fix evp_cipher_ctx and std::pair<t1,t2>::second incomplete type errors?如何修复 evp_cipher_ctx 和 std::pair<t1,t2>::second 不完整类型错误?
【发布时间】:2018-09-12 19:13:04
【问题描述】:

在 picco an MPC compiler 目录中运行以下 docker 命令以及克隆 MPC-SoK/frameworks github repo 后,我收到以下编译错误:

docker build -t picco .
  • “struct evp_cipher_ctx”的前向声明
  • 'std::pair<_t1 _t2>::second' 类型不完整
  • 'EVP_CIPHER_CTX en' 具有初始化程序但类型不完整

我已经看到许多与这些特定错误中的一个或多个相关的 github 和堆栈交换票证和帖子,但没有一个实际上为它们提供了可行的解决方案,例如:

似乎第一个和第三个错误是由于 Openssl 中的更新引起的,但是我尝试在 Mac 上运行带有 1.0.1、1.0.2、1.1.0 和 1.1.1 的 openssl 的全新 Ubuntu 16.04 和 18.04 虚拟机带有 openssl 1.0.2 的 OSX High Sierra,都具有相同的故障点,并且都具有相同的三类错误。

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

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

【问题讨论】:

  • 能否包含指向您克隆的 GitHub 存储库的链接?
  • @ReinierTorenbeek 我已将链接添加到 repo。
  • 谢谢,这有帮助——看看我的回答。

标签: openssl std-pair evp-cipher


【解决方案1】:

查看您提到的存储库,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 是最新的Ubuntu LTS,目前一些openssl 1.1 版本是标准的。正如您已经发现的那样,这会破坏您的构建。

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

【讨论】:

  • @RienierTorenbeek 非常感谢你的工作就像一个魅力!不过,我仍然感到惊讶的是,当我将新的 vm 版本的 openssl 降级到 1.0.2 时,代码没有编译。因为我确保检查降级后使用的版本确实是 1.0.2。
  • 我的荣幸。你的意思是你运行了实际的install.sh 脚本来在你的虚拟机中构建东西?还是您的意思是docker build -t picco . 命令仍然失败?
  • @z.karl:好的。除非您更改 Dockerfile,否则 docker 命令将不会成功,因为整个构建都发生在 docker 内部,而您在此之外所做的任何事情都不会产生很大的影响。我不知道为什么在降级 OpenSSL 后在您的 VM 中运行 install.sh 可能无法正常工作——这可能是另一个问题 :-)
猜你喜欢
  • 2016-09-10
  • 2014-07-13
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多