ошибка glibc, когда двоичный файл c ++ компилируется динамически, но не статически

Учтите следующее: у меня есть файл c ++. Я использую машину RHEL6 для компиляции кода. Но я хочу, чтобы мой исполняемый / двоичный файл также мог работать на RHEL4. Теперь я испытал следующие 3 случая:

  1. Если я скомпилирую простой файл c ++ на RHEL6 с gcc версии 4.4.7, я не смогу выполнить его на машине RHEL4. Ошибка

ошибка при загрузке разделяемых библиотек: требуется динамический компоновщик glibc 2.5 или новее

Решение этой проблемы можно найти в gcc: уменьшить требуемую версию libc. После исправления я могу запустить двоичный файл на RHEL4.

  1. Если я компилирую (на RHEL6 с той же версией gcc) со статическими библиотеками, я могу выполнить его на машине RHEL4. Нет необходимости использовать -Wl,--hash-style=both, как в случае 1.

  2. Если я компилирую свой проект (вместо одного файла) на RHEL6, я получаю следующую ошибку при запуске двоичного файла на платформе RHEL4.

/lib64/libc.so.6: версия `GLIBC_2.7 'не найдена

У меня вопрос:

а) Почему не возникает ошибка при статическом связывании библиотек.

б) В чем разница между ошибками, возникающими в случае 1 и случае 3.


person Shray    schedule 12.08.2020    source источник


Ответы (1)


  1. не удалось работать с этим компоновщиком, библиотекой по умолчанию и динамической компоновкой. 3. Статическая компоновка копирует код из библиотек в ваш исполняемый файл, и они работают стабильно везде, где находится этот исполняемый файл. Динамическая компоновка может быть немного сложной из-за наличия одних и тех же библиотек и версий библиотек в пути поиска динамических библиотек во время выполнения, оставляя код незавершенным во время выполнения.
person David G. Pickett    schedule 12.08.2020