-1

Я хотел поиграть с моими друзьями в одиночку на собственном сервере Unturned на VPS моих друзей с Debian 7. Я установил его в соответствии с инструкциями, но когда я запускаю сервер, это появляется.

Пожалуйста, помогите, спасибо

1 ответ1

0

Короткий ответ

Библиотека GNU libc в Debian Wheezy слишком старая, чтобы запустить нужную вам программу.

Длинный ответ

  1. Эта широко используемая стандартная библиотека C, GNU libc (для краткости "glibc"), старается поддерживать обратную совместимость со старыми приложениями, в то же время продвигаясь вперед с точки зрения реализованных функций.

  2. Чтобы сделать это возможным, он версии своих "символов".

    Символы - это имена функций и переменных, которые библиотека "экспортирует" - делает доступными программный код, который "связывает" библиотеку.

  3. Каждая новая версия библиотеки GNU libc которая получает определенные изменения в экспортируемых символах, получает конкретную запись в таблице символов, идентифицирующую конкретную версию этой библиотеки. Вы можете думать об этом как о "дескрипторе" определенного гарантированного набора функций, предоставляемого этой библиотекой.

    Это делается прозрачно компилятором, который связывает код скомпилированной программы с glibc.

  4. Какой бы компилятор не использовался для компиляции и компоновки вашей программы, он работал в системе, в которой был установлен glibc 2.15, и поэтому получающаяся программа теперь "хочет" glibc 2.15 или выше.

Теперь посмотрим, какая версия glibc у моего Debian Jessie (8.0):

$ apt-cache policy libc6
libc6:
  Installed: 2.19-18+deb8u4
  Candidate: 2.19-18+deb8u4
  Version table:
 *** 2.19-18+deb8u4 0
        500 http://http.debian.net/debian/ jessie/main amd64 Packages
...

Но если мы посмотрим на то, что есть в Wheezy, то увидим, что он 2.13 - два выпуска "до" версии, в которой нуждается ваша программа.

Что с этим делать?

Если перестройка этой программы невозможна (я считаю, что это не так), у вас есть только два варианта:

  • Каким-то образом привязать новый glibc к системе и заставить программу "увидеть" его.

    Теоретически, должна быть возможность создать более новый glibc, настроив его в процессе таким образом, чтобы он устанавливался в нестандартном месте - например, в /opt/glibcX.Y или что-то в этом роде.

    Имея более новую доступную версию glibc, вы можете использовать стандартную "хитрость", чтобы заставить вашу программу использовать нестандартную библиотеку: переменную среды LD_PRELOAD . Что-то вроде этого:

        $ LD_PRELOAD=/opt/glibcX.Y/libc6.so ./myprogram
    
  • Обновите вашу установку Debian.

Если вы не слишком увлекаетесь созданием вещей и работой с низкоуровневыми механизмами, второй вариант, вероятно, является более простым способом решения данной проблемы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .