Вопрос по glibc, linux, ubuntu – Запуск программы на С, скомпилированной здесь, приводит к ошибке «Библиотека GLIBC не найдена» на другом сервере - это моя ошибка или их ошибка?

5

компилированная здесь программа @C прекрасно работает на наших серверах Ubuntu. Но когда кто-то другой пытается запустить его на своем конкретном сервере Linux, он получает следующие ошибки:

./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./myprog-install)
./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.7' not found (required by ./myprog-install)

Мне нужно обновить наши библиотеки glibc и перекомпилировать? Или они что-то упустили на своем сервере?

Если я запускаю apt-cache show libc6, моя Ubuntu сообщает мне, что версия:

Package: libc6
Priority: required
Section: libs
Installed-Size: 9368
Maintainer: Ubuntu Core developers <[email protected]>
Original-Maintainer: GNU Libc Maintainers <[email protected]>
Architecture: i386
Source: eglibc
Version: 2.11.1-0ubuntu7.10

Если я смотрю наhttp: //packages.ubuntu.com/hardy/libc текущая версия выглядит как 2.7-10ubuntu8.1.

Я смущен числами. С одной стороны, 2.11-1-0 больше, чем 2.7-11. С другой стороны, 7.10 - это число ниже, чем 8.1.

Как вы думаете, я просто обновляю пакет библиотеки C и перекомпилирую? Или на сервере другого человека отсутствует какая-либо необходимая библиотека для совместимости?

Ты можешь спросить об этом на Askubuntu.com, или посмотрите этот связанный вопрос. Askubuntu.com / д / 103995/59427. David Nehme

Ваш Ответ

2   ответа
8

libc-2.3 или старше. Это не сработает.

Это просто вопрос обновления пакета библиотеки C

Нет: обновление вашего glibc только сделает вещихуж.

Вы можете попробовать перечисленные решенияВо.

Можем ли мы разумно попросить другую сторону обновить свою систему для поддержки, а не понизить версию нашего компилятора?

Обычно клиент сильно сопротивляется запросам на обновление своей системы: он работает нормально для нихкак ест, и любое обновление может сломать другие существующие приложения.

Если вы планируете распространять двоичные файлы в Linux (в отличие от сборки их в целевой системе), вам нужно научиться создавать двоичные файлы, которые будут работатьгде угодн, или вам нужно указать свои требования (минимальные версии ядра и libc и т. д.) и отвергнуть клиентов, которые не могут выполнить эти требования.

Обновить

Почему они получили две ошибки. Почему они просто не получили один для GLIBC_2.11.1, который, по-видимому, и создан мной?

Управление версиями символов не работает таким образом.

Когда вводится новый символ, он помечается знакомто libc версия, например[email protected]@GLIBC_2.2, [email protected]@GLIBC_2.15, так далее

Когда вы связываете программу, которая использует оба вышеуказанных символа, и пытаетесь запустить ее, например, на. В системе glibc-2.1 вы получите две ошибки.

Но если вы связываете программу, которая Не используйте любой из вышеперечисленных символов, например

int main() { return 0; }

тогда ваша программа будет работать без ошибок.

Обновление 2:

они не должны добавлять GLIBC_2.4 и GLIBC2.7 в свою систему Linux, не так ли?

Нет, нет.GLIBC_2.11 будет содержать все предыдущие символы. На самом деле, они не могли установитьи то и друго glibc-2.4 и 2.7, даже если они этого хотят: довольно сложно установить несколько версий одновременно, иневозможн для установки нескольких версий в папку по умолчанию.

А ну понятно. Из-за самого сообщения об ошибке ссылка на GLIBC_2.4 и GLIBC_2.7 не найдена. Duh. :) Я посмотрю решения, рекомендованные в ссылке. Это то, что мы можем разумно попросить другую сторону обновить свою систему для поддержки, а не понизить наш компилятор? Благодарность Doug Lerner
Это интересная дилемма. Предположительно, более новые версии glibc являются улучшениями по сравнению с более старыми - быстрее, менее глючными и т. Д. Я ненавижу поддерживать несколько версий. И я также не хотел бы выпускать что-то, нацеленное на наименьший общий знаменатель, и получать, возможно, меньше производительности. Не говоря уже о повторном тестировании всех функций для старых библиотек. Это не приложение для массового рынка, поэтому, возможно, в этом случае можно попросить клиента обновить его до версии Linux, где приложение было тщательно протестировано. В противном случае трудно оказать надлежащую поддержку. Благодарность Doug Lerner
У меня есть один быстрый вопрос, если кто-нибудь увидит это! Почему пользователь получил два сообщения об ошибках: одно для GLIBC_2.4 и другое для GLIBC_2.7. Почему они просто не получили один для GLIBC_2.11.1, который, по-видимому, и создан мной? Спасибо. Дуг Doug Lerner
Спасибо за ваш дальнейший ответ. Я не очень хорошо понимаю эту систему, но, кажется, если я отвечу здесь, вы увидите это. Я не получаю никаких уведомлений, поэтому просто зайдите. В любом случае ... Мне стыдно сказать, что я не до конца понимаю ваш ответ. Но если пользователь обновит свою библиотеку до GLIBC_2.11.1 или выше, будет ли это, из-за обратной совместимости, избегать появления обеих ошибок? Другими словами, им не нужно добавлять GLIBC_2.4 и GLIBC2.7 в свою систему Linux, не так ли? Еще раз спасибо Doug Lerner
Еще раз спасибо. Теперь я понимаю. Очень признателен Doug Lerner
1

новенький. Создайте его для более старой версии glibc, предпочтительно той, которую они используют.

B, но как сделать ссылку на старую версию glibc? Нужно ли устанавливать старую версию glibc? Могут ли разные версии glibc сосуществовать в одной системе? linquize

Похожие вопросы