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

компилированная здесь программа @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 и перекомпилирую? Или на сервере другого человека отсутствует какая-либо необходимая библиотека для совместимости?

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

Ответы на вопрос(2)

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

 linquize14 авг. 2012 г., 12:38
B, но как сделать ссылку на старую версию glibc? Нужно ли устанавливать старую версию glibc? Могут ли разные версии glibc сосуществовать в одной системе?
Решение Вопроса

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, даже если они этого хотят: довольно сложно установить несколько версий одновременно, иневозможн для установки нескольких версий в папку по умолчанию.

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

Ваш ответ на вопрос