我在稳定分支3.4上的官方mongodb存储库中分叉并修改了一个小问题。
我正在构建一个从头开始安装的新VM,并使用必需的软件包来构建源代码。
构建指令施加GCC 5.3,这在debian 8的稳定分布中是不可用的。如果我切换到不稳定并编译,(它可以工作但是),输出可执行文件大于600MB并且不能在稳定的debian上运行有GCC 4.9。
问题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稳定运行吗?
答案 0 :(得分:0)
对问题1的回答:可执行输出包含可以使用strip
linux命令从二进制文件中删除的调试符号。这会将文件大小减少到~50MB
回答问题2 :为了构建Debian 8 stable,不应该使用GCC编译器而是使用CLANG。记录的最小值为3.4,版本3.5为稳定的debian 8包。
虽然存在一些小的编译问题,但Scons编译脚本(python)中存在问题。但在修复之后,它会生成一个能够在debian 8 stable上运行的可执行文件。
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++