如何为 Debian 8 Jessie(稳定版)构建 Mongodb 3.4(mongod)?

How to build Mongodb 3.4 (mongod) for Debian 8 Jessie (stable)?

我从稳定分支 3.4 上的官方 mongodb 存储库中 fork 并修改了一个小东西。

我正在构建一个全新的 VM,其中包含构建源代码所需的软件包。

构建说明强加了 GCC 5.3,它在 debian 8 的稳定发行版中不可用。如果我切换到不稳定版本并编译,(它工作正常但是)输出可执行文件 >600MB 并且不 运行在具有 GCC 4.9 的稳定 debian 上。

问题 1:我的构建怎么可能比 mongodb debian 8 存储库中建议的版本大 10 倍?

-rwxr-xr-x 1 root root 52M Sep 11 17:50 /usr/bin/mongod

-rwxr-xr-x 1 root root 664M Oct 28 11:50 /build/mongod

问题 2:此外,我构建的版本不能 运行 在 debian 8 稳定版上,因为它使用稳定版中不可用的 GCC 5.3。那么我如何构建它,使其 运行 在稳定的 debian 8 上就像 mongodb 提供的软件包存储库一样?

如果我尝试使用 GCC 4.9.2 进行构建,尽管我最终可以修复一些错误,但编译它仍然是一个地狱。这是否意味着他们有一些魔术?

# scons core -j 3 --ssl --link-model=object --opt=on --dbg=off --disable-minimum-compiler-version-enforcement --disable-warnings-as-errors

[...]

src/mongo/db/repl/storage_interface_mock.h:50: error: undefined reference to 'vtable for mongo::repl::CollectionBulkLoaderMock'
/usr/bin/ld.gold: the vtable symbol may be undefined because the class is missing its key function

我可以看到在源存储库中有一个特殊的目录 debian,是否可以用它来构建 debian 软件包。我应该如何使用它?这会使它在 debian 8 稳定版上 运行 吗?

问题 1 的答案:可执行输出包含可以使用 strip linux 命令从二进制文件中删除的调试符号。这会将文件大小减小到 ~50MB

问题 2 的答案:为了构建 Debian 8 稳定版,不应使用 GCC 编译器,而应使用 CLANG。记录的最低版本是 3.4,版本 3.5 在稳定的 debian 8 包中。

Scons 编译脚本中存在一些小的编译问题和问题 (python)。但是在修复这些问题之后,它会生成一个能够在 debian 8 稳定版上 运行 的可执行文件。

scons core -j 3 --ssl --link-model=object --opt=on --dbg=off --disable-minimum-compiler-version-enforcement --disable-warnings-as-errors CC=/usr/bin/clang CXX=/usr/bin/clang++