Существует 32-разрядная программа, что я должен работать на 64-разрядной Ubuntu. Когда я пытаюсь выполнить его, у меня есть следующая ошибка:
программа: ошибка, в то время как загрузка совместно использовала библиотеки: libncurses.so.5: не может открыть файл общего объекта: Никакой такой файл или каталог
При использовании моих персональных ПК мне удалось решить эту проблему при помощи следующих команд:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Однако я теперь должен запустить эту программу на другом ПК, на котором я не могу иметь sudo прав. Я сделал поиск Google для решения этой проблемы, но ничто не нашел окончательным.
Таким образом, мой вопрос: есть ли какой-либо способ для меня запустить 32-разрядную программу на 64-разрядной Ubuntu (14.04 LTS) без какой-либо команды sudo?
Редактирование: программа, которую я пытаюсь использовать, является ProFit V3.1
Редактирование для @EliahKagan: результаты требуемых команд: На целевой машине:
$ lsb_release -a
lsb_release : command not found
$ apt-cache policy libc6
apt-cache : command not found
$ file /lib/x86_64-linux-gnu/libc-*
/lib/x86_64-linux-gnu/libc-*: cannot open `/lib/x86_64-linux-gnu/libc-*' (No such file or directory)
Учитывая эти результаты, я не уверен, что должен также дать результаты на своей машине...? На моей машине:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5
LTS Release: 14.04
Codename: trusty
$ apt-cache policy libc6
libc6:
Installed: 2.19-0ubuntu6.9
Candidate: 2.19-0ubuntu6.9 [...]
$ file /lib/x86_64-linux-gnu/libc-*
/lib/x86_64-linux-gnu/libc-2.19.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs) [...]
Исходный код ProFit 3.1 доступен, официально и бесплатно. Таким образом вместо того, чтобы пытаться выполнить предварительно созданный 32-разрядный двоичный файл в 64-разрядной системе, которой не установили поддержку библиотеки для него, я рекомендую создать ее из источника как 64-разрядная программа.
Одна опция состоит в том, чтобы создать его в Вашей системе, где можно легко установить что-либо необходимое для сборки, и принести скомпилированный двоичный файл к другой системе, где Вы также хотите выполнить его.
Удостоверьтесь своя собственная система (тот, на котором Вы действительно имеете административные права), актуально, затем установите некоторые инструменты, которые полезны для компиляции программного обеспечения:
sudo apt update && sudo apt upgrade
sudo apt install build-essential libncurses5-dev
libncurses5-dev
пакет предоставляет заголовочные файлы одной из библиотек эта программа потребности. Другие кажутся всем быть зависимостями build-essential
(который дает Вам некоторые удобные утилиты также, как make
, и компилятор, если Вы еще не установлены).
Вы упомянули libstdc++6
в Вашем вопросе. Пакет, который предоставил бы заголовочные файлы той библиотеке, libstdc++6-4.7-dev
. Однако ProFit, кажется, на самом деле не использует libstdc++6
. Таким образом, Вам не придется установить ту деталь -dev
пакет.
Загрузите архив исходного кода для ProFit. Это - названный файл profit.tar.gz
.
Распакуйте архив исходного кода и войдите src
подкаталог того, где это было распаковано:
tar xf profit.tar.gz
cd ProFitV3.1/src
Дополнительно, создать резервную копию Makefile
прежде, чем изменить его:
cp Makefile Makefile.orig
Как рекомендуется в официальных инструкциях по сборке, открытых Makefile
в текстовом редакторе по Вашему выбору (nano
и vim
будет работать, как будет графический редактор), и не прокомментируйте строки, которые включают поддержку readline.
Открыть файл в nano
:
nano -w Makefile
Найдите эти строки:
#READLINE = -DREADLINE_SUPPORT
#READLINELIB = -lreadline -lcurses
Это строки 9 и 10. Для некомментария их удалите продвижение #
от каждого так они похожи на это вместо этого:
READLINE = -DREADLINE_SUPPORT
READLINELIB = -lreadline -lcurses
Сохраните файл и выйдите из текстового редактора. (Выходы Ctrl+X nano
, и Вам предложат сохранить Ваши изменения.)
Создайте программу путем выполнения просто:
make
Вы будете видеть некоторые предупреждения компилятора, но не должно быть никаких ошибок. (Если существуют ошибки, то мы должны будем выяснить то, что пошло не так, как надо.)
Исполняемый файл называют profit
должен теперь существовать в текущем каталоге. Попытайтесь выполнить его, чтобы видеть, работает ли это:
./profit
Это работало на меня. (Как Вы, вероятно, знаете, можно затем работать quit
выходить назад к оболочке.)
ek@Io:~/src/ProFitV3.1/src$ ./profit
PPPPP FFFFFF ii tt
PP PP FF tt
PP PP rrrrr oooo FF ii ttttt
PPPPP rr rr oo oo FFFF ii tt
PP rr oo oo FF ii tt
PP rr oo oo FF ii tt
PP rr oooo FF ii ttt
Protein Least Squares Fitting
Version 3.1
Copyright (c) Dr. Andrew C.R. Martin, SciTech Software 1992-2009
Copyright (c) Dr. Craig T. Porter, UCL 2008-2009
ProFit>quit
ek@Io:~/src/ProFitV3.1/src$
Вернитесь к родительскому каталогу каталога ProFit верхнего уровня (т.е. каталог, который содержит каталог, где Вы распаковали .tar.gz
архив). Создайте новый архив. Этот включает файлы, созданные из сборки.
cd ../..
tar cJvf ProFitV3.1.tar.xz ProFitV3.1/
tar
луг Ваша сборка гарантирует, что, неважно, как Вы передаете его другой системе, разумные полномочия (включая исполняемые полномочия на profit
двоичный файл), сохраняются.
xz
сжатие является совершенно дополнительным, все же. Вы могли удалить J
флаг (и .xz
расширение).
Копия ProFitV3.1.tar.xz
, который Вы просто создали к другой системе, в которой Вы хотите использовать ProFit (система, в которой Вы не администратор).
Как лучше всего сделать, это зависит от Вас, обеспечиваются доступ к другой системе, и Вы, вероятно, уже знаете лучший способ. Но один путь scp
:
scp ProFit3.1.tar.xz remote-username@remote-hostname:
Это копирует файл в Ваш корневой каталог на другой машине. (Не забывайте двоеточие в конце.) необходимо будет ввести пароль, если основанная на ключе аутентификация не была настроена. Конечно, это только работает, если у Вас есть доступ через SSH.
В другой системе Ubuntu распакуйте архив, cd
к местоположению profit
исполняемый файл и попытка, выполняющая его:
tar xf ProFitV3.1.tar.xz
cd ProFitV3.1/src
./profit
Это работало на меня. Однако я протестировал это с двумя системами Ubuntu 16.04. У меня не было шанса протестировать его с Ubuntu 14.04.
Выполните любую необходимую конфигурацию, как установка HOMEDIR
и DATADIR
переменные среды и, дополнительно, помещая исполняемый файл в другой каталог. Это покрыто Установкой под подобными UNIX операционными системами в инструкциях по установке ProFit.
Можно поместить export
команды, как показано в тех инструкциях, в .profile
файл в Вашем корневом каталоге. Они будут установлены для последующих логинов. Существуют также другие методы для установки переменных среды в расчете на пользователя, и Вы не должны быть администратором, чтобы сделать их. Однако, если Вы принимаете решение использовать метод, где Вы редактируете .pam_environment
, необходимо быть очень осторожными; хотя это не будет влиять ни на каких других пользователей в системе, синтаксической ошибке в Вашем .pam_environment
файл будет препятствовать тому, чтобы Вы вошли в систему, и Вы могли бы нуждаться в помощи администратора для отмены ошибки.
ProFit имеет очень немного зависимостей, по сравнению с большей частью программного обеспечения. Таким образом, я ожидаю, что это будет работать. (Это работало на меня.) Сообщите мне, как это идет.
Проблема не в том, чтобы запустить 32-битный двоичный файл на 64-битной платформе, которая является ретро-совместимой.
Проблема заключается в установке новой общесистемной библиотеки, для которой у вас недостаточно прав.
Возможно, вы захотите найти версию вашего бинарного файла, которая не требует общих библиотек, но в комплекте с каждой необходимой библиотекой.
РЕДАКТИРОВАТЬ:
Если в этой системе установлены debootstrap и schroot, возможно, вы захотите войти в подпапку вашего дома и стать пользователем root в этой новой системе.
Это позволило бы иметь корневые привилегии в этой «виртуальной среде».
Пояснения о том, как этого добиться, можно найти здесь: http://www.binarytides.com/setup-chroot- убунт-Debootstrap /