Использование lib c и libm от RHEL 6 до RHEL 7 - PullRequest
1 голос
/ 10 июля 2020

Мое приложение ссылается на библиотеки, построенные на RHEL 6. Когда я компилирую это приложение на RHEL 7, компоновщик выдает ошибки для версии glib c. Ниже приводится одна из ошибок:

неопределенная ссылка на символ '__tls_get_addr @@ GLIBC_2.12' /lib64/ld-linux-x86-64.so.2: ошибка добавления символов: DSO отсутствует в командной строке collect2: error: ld вернул 1 статус выхода

Для исправления я скопировал lib c и libm из RHEL 6 в RHEL 7 и связал с ними вместе с lib c и libm из RHEL 7. Вызовет ли это проблема во время выполнения, если я скопирую lib c и libm из RHEL 6 в RHEL 7? Есть ли другой способ справиться с такими проблемами?

Спасибо, Манге sh Sawant.

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Будет ли возникать проблема во время выполнения, если я скопирую lib c и libm из RHEL 6 в RHEL 7?

Копирование libc.so.6 и libm.so.6 из RHEL6, например, ~/rhel6/libs или /tmp не вызовет никаких проблем (вы уже это сделали).

Но перезапись RHEL7 /lib64/libc.so.6 копией RHEL6, скорее всего, сделает каждый Программа в системе RHEL7 выполняет cra sh и делает эту систему не загружаемой. Убедитесь, что у вас есть резервные копии и аварийный диск, и вы знаете, как им пользоваться, если решите попробовать это.

Есть ли другой способ решить такие проблемы?

Правильный способ справиться с этим - создать цепочку инструментов, которая нацелена на желаемый GLIB C. Подробнее здесь .

0 голосов
/ 14 июля 2020

Хотя Red Hat Enterprise Linux 6 поставляется с glib c 2.12, в нем нет символа __tls_get_addr@GLIBC_2.12 с версией, только __tls_get_addr@GLIBC_2.3. Этот символ также присутствует в более поздних версиях glib c.

Я не думаю, что проблема, с которой вы столкнулись, может быть решена путем понижения версии glib c. Как сказал Employed Russian , перезапись системного glib c в любом случае сделает систему не загружаемой.

...