У меня есть 2 машины, одна из них - Ubuntu 16.04, на которой установлена libc-2.23. еще один redhat 7, версия libc 2.17
Следующая простая программа скомпилирована на Ubuntu и может хорошо работать на Redhat 7.
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
printf("hello world\n");
double n = 4;
printf("%e\n", sqrt(n));
return 0;
}
но когда я компилирую mongodb в ubuntu и отправляю бинарный файл в redhat 7, я получаю следующую ошибку.
[zhifan@rhel-2372970 ~]$ ldd mongod
./mongod: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by ./mongod)
linux-vdso.so.1 => (0x00007ffd4313a000)
libm.so.6 => /lib64/libm.so.6 (0x00007faaf5eb4000)
librt.so.1 => /lib64/librt.so.1 (0x00007faaf5cac000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007faaf5aa7000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007faaf5891000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faaf5675000)
libc.so.6 => /lib64/libc.so.6 (0x00007faaf52b1000)
/lib64/ld-linux-x86-64.so.2 (0x0000564cf2068000)
Итак, мои вопросы:
- Как при запуске двоичного файла загрузчик библиотеки решает, какую библиотеку (в данном случае libc) можно использовать?
- Я уверен, что точно такая же версия mongod (которая построена mongo inc) может работать с libc-2.17, но почему моя сборка не может работать с libc-2.17?