在 debian 10 上使用 gcc 8.3 编译:
root@debian:/home/mongo# ldd /home/mongo/build/opt/mongo/db/mongod
linux-vdso.so.1 (0x00007ffe9f1c0000)
libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f1d7012d000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f1d70105000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f1d700eb0
...
所以我确信它是作为动态链接进行编译和链接的。它实际上使用来自 ldd 的 gcc 6 运行时 .so,尽管是用 gcc 8 编译的:
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc6183c1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc618042000)
Debian 9 上有 gcc 6.3 的相同可执行文件:
ldd /usr/bin/mongod
statically linked
它出现了段错误
mongod[12662]: segfault at 8 ip 00007f25798fa821 sp 00007ffccda20090 error 4 in ld-2.24.so
这是什么原因呢?如何在不同的Linux Debian版本上编译运行?