c++ - 编译 Mongodb 3.6.5 以插入到 Docker 镜像中

标签 c++ mongodb docker gcc

背景

我正在尝试从标记 r3.6.5 处的代码编译 MongoDB(目前是 mongos 二进制文件,但我认为该问题适用于所有可执行文件)并使用创建的二进制文件替换 MongoDB docker 中的二进制文件图片。

运行这个命令:

docker run --rm -ti mongo mongos --version

返回以下内容:

mongos version v3.6.5
git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
allocator: tcmalloc
modules: none
build environment:
    distmod: debian81
    distarch: x86_64
    target_arch: x86_64

问题

编译检查之一是:

Checking if C compiler is GCC 5.3.0 or newer...no
Checking if C++ compiler is GCC 5.3.0 or newer...no

如果我使用高于 5.1.0 的 GCC 版本,当我尝试运行注入(inject)了我的可执行文件的容器时,我会收到以下消息:

mongos: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by mongos)

根据 this page我需要使用 GCC < 5.1.0 来避免这种情况,但我还需要使用 GCC > 5.3.0 来编译分支,那么我该怎么做呢?

最佳答案

您的 docker 镜像需要包含一个 C++ 运行时,该运行时不早于您用于从源代码编译 mongodb 的系统上的运行时。您可以使用 --disable-minimum-compiler-version-enforcement 标志回避编译器版本检查,但我不建议这样做:构建系统出于某种原因强制执行 GCC 5.4。如果您的 docker 镜像没有 GCC 5.4+ 运行时,除了基于更新的系统制作新的 docker 镜像之外,您无能为力。

关于c++ - 编译 Mongodb 3.6.5 以插入到 Docker 镜像中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51058600/

相关文章:

docker - 使用 yarn 工作空间在 docker 镜像中安装 yarn

bash - docker neo4j 无法连接以从远程 url 加载 csv

c++ - 我可以根据其版本在 FreeBSD 中编译一段代码吗

c++ - 是 case statement1 + statement2 : poor coding?

c++ - 测量函数的执行时间

c# - MongoDB 反序列化/对象的反序列化

javascript - 从提示符中获取数组并插入 MongoDB 数据库

java - MongoDB 与 Morphia 的日常分组

python - Docker运行停止工作/bin/bash:entrypoint.sh:没有此类文件或目录

C++赋值运算符关于继承的问题