Ошибка связи с версионными символами (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, поэтому его нельзя использовать для связи с системными библиотеками.

Другие вопросы по тегам