Страница 1 из 1

Конфликт версий библиотек

СообщениеДобавлено: 08.06.2015 15:05:13
ya_vanka
Добрый день.

При запуске программы (под Linux) на одной машине выдается ошибка:
/lib32/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libglib-2.0.so.0)

Посмотрел через ldd библиотека libglib-2.0.so.0 используется не внешними библиотеками (как я думал сначала), а самим исполняемым файлом.
Возможности обновить библиотеку на машине нет. Там стоит GLIBC_2.13.

Какие есть способы решить эту проблему?

Re: Конфликт версий библиотек

СообщениеДобавлено: 08.06.2015 16:03:46
MiniQ
Перелинковать под version `GLIBC_2.15' есть возможность?

Re: Конфликт версий библиотек

СообщениеДобавлено: 08.06.2015 16:36:06
ya_vanka
Перелинковать под version `GLIBC_2.15' есть возможность?


Вы, видимо, имели в виду Перелинковать под version `GLIBC_2.13'?

Видимо так и придется. Осталось разобраться где найти более старую версию.
Потом нужно ли делать даунгрейд системной библиотеки или можно линкеру указать напрямую какую версию использовать?

Re: Конфликт версий библиотек

СообщениеДобавлено: 08.06.2015 16:42:04
MiniQ
да, это и имел ввиду, сорь.
я бы глянул исходники юнита, требующего GLIBC и попробовал понизить требования к версии.

Добавлено спустя 12 минут 1 секунду:
в исходниках не нашел ограничений на версию 2.15 (только >2).
значит надо линковать на машине с нужной версией glibc.
Кстати попробуйте собрать на целевой машине.

Re: Конфликт версий библиотек

СообщениеДобавлено: 09.06.2015 13:13:19
ya_vanka
На целевой машине возможности собрать как раз и нет.

Так все же есть возможность линкеру указать версию/путь к библиотеке?
Или только установкой/даунгрейдом системной библиотеки?

Re: Конфликт версий библиотек

СообщениеДобавлено: 09.06.2015 17:42:38
Sergei I. Gorelkin
Версию указать нельзя. Собственно, это версии не библиотеки, а функции. Т.е. в одной .so может быть несколько версий одной и той же ф-ции. Линкер всегда связывает с той, что помечена флагом "текущая". И соответственно, у каждой функции может быть своя "текущая" версия.

Пути к библиотекам указать можно, но там должны находиться все библиотеки, от которых зависит проект (включая содержимое dev-пакетов), а не какая-то одна из них. Иначе получится каша. Иными словами - обычная кросс-компиляция, только целевой процессор тот же самый и поэтому можно обойтись без отдельных binutils.

Для управления путями используются ключи командной строки -Xd, -XR, -Fl. Какие именно - подбирается опытным путем...