背景
我正在尝试从标记 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/