我需要在 64 位 Ubuntu 上运行一个 32 位程序。当我尝试运行它时,出现以下错误:
程序:加载共享库时出错: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 搜索来解决这个问题,但没有找到任何结论。
所以我的问题是:有没有什么办法可以在 64 位 Ubuntu(14.04 LTS)上运行 32 位程序,而无需任何 sudo 命令?
编辑:我尝试使用的程序是利润 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) [...]
答案1
问题实际上不在于在 64 位平台上运行 32 位二进制文件,而是向后兼容。
问题在于您没有足够的权限在系统范围内安装新的共享库。
您可能想要搜索二进制文件的版本,该版本不需要共享库但捆绑了所需的每个库。
编辑 :
如果该系统上安装了 debootstrap 和 schroot,您可能需要 chroot 到您的主目录的子文件夹中,并在新系统中成为 root。
这将允许在该“虚拟环境”中拥有 root 权限
如何实现这一目标的解释可以在这里找到:http://www.binarytides.com/setup-chroot-ubuntu-debootstrap/
答案2
ProFit 3.1 的源代码是官方提供的,而且是免费的。因此,我建议不要尝试在没有安装库支持的 64 位系统上运行预构建的 32 位二进制文件,而是从源代码构建作为 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
退出并返回到 shell。)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 操作系统下安装在利润安装说明。您可以将
export
命令(如这些说明中所示)放在.profile
主目录中的文件中。它们将为后续登录设置。还有其他方法用于设置每个用户的环境变量,并且您不需要是管理员就可以执行这些操作。但是,如果您选择使用编辑 的方法.pam_environment
,您应该非常小心;虽然它不会影响系统上的任何其他用户,文件中的语法错误.pam_environment
将阻止您登录您可能需要管理员的帮助来消除错误。
与大多数软件相比,ProFit 的依赖关系非常少。所以我希望它能正常工作。(对我来说,它有效。)请告诉我进展如何。