Ошибка связи с версионными символами (memcpy & secure_getenv)
Я вижу неопределенные символы при попытке связать разделяемые библиотеки с программой на Redhat Linux.
Мы работаем с ядром Linux 3.10.0, gcc 4.8.2 с libc-2.17.so и libblkid 2.23.2
Когда я создаю приложение, которое я пишу, я получаю два неопределенных символа из libblkid: memcpy@GLIBC_2.14
а также secure_getenv@GLIBC_2.17
, (Очень похожая сборка работает на других машинах, якобы используя те же версии всего).
Примечание для secure_getenv
libblkid хочет ту же версию, что и сама библиотека libc.
Глядя на символы, определенные в libc-2.17.so я нахожу memcpy@@GLIBC_2.14
, memcpy@GLIBC_2.2.5
, secure_getenv
, а также secure_getenv@GLIBC_2.2.5
, Согласно моему пониманию двойной @
во-первых memcpy
версия просто должна пометить ее как версию по умолчанию. И почему-то даже в этом libc с версионными символами первый secure_getenv
кажется неверсированным.
Итак, почему требование memcpy@GLIBC_2.14
не соответствует дефолту memcpy@@GLIBC_2.14
?
И по логике вещей я бы ожидал базовую версию secure_getenv
в libc-2.17, чтобы соответствовать требованию для версии 2.17.
И так, что здесь происходит? Что делает его неудачным на моей машине разработки, а не на других? Как это исправить? (Поскольку make работает на других машинах, это, кажется, что-то особенное для моей среды сборки, но что?)
1 ответ
У вас наверное есть compat-glibc
установлен, как указано -L/usr/lib/x86_64-redhat-linux6E/lib64
аргумент. compat-glibc
в Red Hat Enterprise Linux 7 предоставляет только glibc 2.12, поэтому его нельзя использовать для связи с системными библиотеками.