A U*_*har 18 software-installation
我有 Ubuntu 14.04。我最近下载了Viber。Viber .deb 文件具有 64 位架构。我想在我的电脑上安装它,但我的电脑只支持 32 位。
运行的输出lscpu如下:
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 2800.000
BogoMIPS: 5586.12
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
Run Code Online (Sandbox Code Playgroud)
Bra*_*iam 22
如果您的硬件支持 64 位,则:
CPU 操作模式:32 位、64 位
并且包准备使用multiarch,这也是真的:
dpkg -I viber.deb
new debian package, version 2.0. <--- here
size 57046082 bytes: control archive=8024 bytes.
0 bytes, 0 lines 0
1210 bytes, 29 lines control
9475 bytes, 33 lines * copyright
7404 bytes, 85 lines md5sums
39 bytes, 2 lines * postinst #!/bin/bash
800 bytes, 35 lines * preinst #!/bin/bash
500 bytes, 24 lines * prerm #!/bin/bash
Package: viber
Version: 4.2.2.6
Section: non-free/net
Priority: extra
Architecture: amd64 <---- and here
Run Code Online (Sandbox Code Playgroud)
您可以只安装必要的 64 位库和二进制文件,这些库和二进制文件是您运行应用程序所需的包的依赖项(没有,稍后详细介绍),对性能的影响几乎为零。就我而言,我刚刚安装了该软件包:
$ sudo dpkg --add-architecture amd64
## adding 64-bits architecture package, in my system I didn't need to
## but it's likely you have
$ sudo apt-get update # this downloads the package list for amd64 arch
$ sudo dpkg -i viber.deb
Selecting previously unselected package viber.
(Reading database ... 268703 files and directories currently installed.)
Preparing to unpack viber.deb ...
Unpacking viber (4.2.2.6) ...
Setting up viber (4.2.2.6) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for gnome-menus (3.13.3-1) ...
Processing triggers for mime-support (3.56) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Run Code Online (Sandbox Code Playgroud)
然后开始遇到问题......
包管理器决定他们不应该为他们的包列出任何依赖项,
Installed-Size: 141336
Conflicts: Viber (<< 4.2.2.6)
Replaces: Viber (<< 4.2.2.6)
Maintainer: Viber Media Inc <support@viber.com>
Run Code Online (Sandbox Code Playgroud)
他们实际需要的:
ldd /opt/viber/Viber | grep 'not found'
libXcomposite.so.1 => not found
libxslt.so.1 => not found
libxml2.so.2 => not found
libgstreamer-0.10.so.0 => not found
libgstapp-0.10.so.0 => not found
libgstbase-0.10.so.0 => not found
libgstinterfaces-0.10.so.0 => not found
libgstpbutils-0.10.so.0 => not found
libgstvideo-0.10.so.0 => not found
libsqlite3.so.0 => not found
Run Code Online (Sandbox Code Playgroud)
所以你必须手动查找并安装缺少的库!如果您知道正确的工具,这很容易。apt-file在这里很方便,还有http://packages.ubuntu.com功能“搜索包的内容”也很好。但我继续寻找它们:
我的系统中已经安装了这些文件,你只需要复制包名,即冒号前以amd64.结尾的包名。您应该按原样复制包名称:
dpkg -S $(ldd /opt/viber/Viber | awk '{print $3}' | grep -vP 'not|viber')
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libdl.so.2
libc6:amd64: /lib/x86_64-linux-gnu/librt.so.1
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libc6:amd64: /lib/x86_64-linux-gnu/libm.so.6
libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6
libxext6:amd64: /usr/lib/x86_64-linux-gnu/libXext.so.6
zlib1g:amd64: /lib/x86_64-linux-gnu/libz.so.1
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/libGL.so.1
libxrender1:amd64: /usr/lib/x86_64-linux-gnu/libXrender.so.1
libglib2.0-0:amd64: /lib/x86_64-linux-gnu/libglib-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
libxcb1:amd64: /usr/lib/x86_64-linux-gnu/libxcb.so.1
libglapi-mesa:amd64: /usr/lib/x86_64-linux-gnu/libglapi.so.0
libxdamage1:amd64: /usr/lib/x86_64-linux-gnu/libXdamage.so.1
libxfixes3:amd64: /usr/lib/x86_64-linux-gnu/libXfixes.so.3
libx11-xcb1:amd64: /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
libxcb-glx0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
libxcb-dri2-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
libxcb-dri3-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
libxcb-present0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-present.so.0
libxcb-sync1:amd64: /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
libxshmfence1:amd64: /usr/lib/x86_64-linux-gnu/libxshmfence.so.1
libxxf86vm1:amd64: /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
libdrm2:amd64: /usr/lib/x86_64-linux-gnu/libdrm.so.2
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3
libffi6:amd64: /usr/lib/x86_64-linux-gnu/libffi.so.6
libxau6:amd64: /usr/lib/x86_64-linux-gnu/libXau.so.6
libxdmcp6:amd64: /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Run Code Online (Sandbox Code Playgroud)
这些我没有安装它们,我使用ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'以下方法获得:
$ ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0
libsqlite3-0:amd64: /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
libxcomposite1:amd64: /usr/lib/x86_64-linux-gnu/libXcomposite.so.1
libxml2:amd64: /usr/lib/x86_64-linux-gnu/libxml2.so.2
libxslt1.1:amd64: /usr/lib/x86_64-linux-gnu/libxslt.so.1
Run Code Online (Sandbox Code Playgroud)
apt-file给我 64 位包是一种逗乐,所以我不得不sudo apt-file -a amd64 update强制它拥有 64 位文件列表。
现在,让我解释一下以上所有内容:
ldd /path/to/binary:读取二进制文件并告诉您所需的库、符号等是什么。dpkg -S: 搜索提供特定安装文件的软件包。awk,sed和grep: 正在修改文本流以仅处理有趣的部分或显示所需的输出。|, $(...): 第一个允许我将命令的输出通过管道传输到另一个,而后者允许我在执行主要命令之前执行/评估命令。TL;博士只需安装这些软件包:
sudo dpkg --add-architecture amd64 ## adding 64-bits architecture package
sudo apt-get update
sudo apt-get install libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer0.10-0:amd64 libgstreamer0.10-0:amd64 libsqlite3-0:amd64 libxcomposite1:amd64 libxml2:amd64 libxslt1.1:amd64 libc6:amd64 libdrm2:amd64 libffi6:amd64 libgcc1:amd64 libgl1-mesa-glx:amd64 libglapi-mesa:amd64 libglib2.0-0:amd64 libpcre3:amd64 libstdc++6:amd64 libx11-6:amd64 libx11-xcb1:amd64 libxau6:amd64 libxcb1:amd64 libxcb-dri2-0:amd64 libxcb-dri3-0:amd64 libxcb-glx0:amd64 libxcb-present0:amd64 libxcb-sync1:amd64 libxdamage1:amd64 libxdmcp6:amd64 libxext6:amd64 libxfixes3:amd64 libxrender1:amd64 libxshmfence1:amd64 libxxf86vm1:amd64 zlib1g:amd64
Run Code Online (Sandbox Code Playgroud)
您还需要安装 64 位内核。
Amr*_*dey 11
不可能在 32 位操作系统上安装仅支持 64 位 arch 的软件,反之亦然。为了安装 64 位软件,您需要一个支持 64 位的硬件和在其上运行的 64 位操作系统。
另外我想提一下,不可能在仅支持 32 位架构的硬件上安装 64 位操作系统作为虚拟机。您的硬件应该支持 64 位架构以及虚拟化支持,以便创建 64 位虚拟机。
Val*_*ity 10
您可以在使用 32 位硬件构建的机器上安装 64 位软件,就像在 x86 目标上运行 ARM 软件一样,使用动态转换。
基本上,诸如qemu之类的软件位于程序和您的计算机之间,执行从 AMD64 指令集到 x86(可能是 i686)指令集的转换(诚然,性能受到了非常严重的影响,在您的情况下可能是完全可以避免)。
鉴于您使用的是 ubuntu,您有一份关于如何设置它的优秀文档。基本上你有两个选择之一,你可以在一个完整的 64 位 VM 环境中使用它自己的内核运行程序,或者,我认为你在这里想要的是用户空间可视化,这使用了 thunking(我认为这并不常见)这些天称为 thunking 但忘记了新词)将系统调用从 64 位转换为 32 位,以便您可以使用自己的内核。
现在指南比我更好地解释了这一点,但简而言之,您需要安装 qemu 和 qemu-kvm-extras-static 包,然后使用 qemu-debootstrap 为您的 64 位程序设置环境和库。然后你需要使用 binfmt_misc 和静态 qemu 解释器(qemu-arch-static,在你的情况下可能是 x86_64、x64 或 AMF64)在它的环境中运行你的程序。
但是请注意,您的 CPU 似乎支持 64 位指令,因此您可以安装 64 位 ubuntu,您无需任何仿真即可在 AMD64 机器上运行 x86 代码,如果您能够做到这一点,可能会更容易,另一方面,如果你想发现 qemu 和架构仿真的世界(如果你得到一个为说... ARM 构建的程序,可能会在以后派上用场)我建议你继续,但要小心,事情有时需要一点点摆弄或调试才能很好地工作。
αғs*_*нιη 10
我不得不说你不是真的
我的电脑只支持 32 位
根据运行lscpu您安装的 Ubuntu 版本的输出是 32 位,而您的系统可以支持 64 位应用程序,如果要安装 64 位应用程序,则必须安装 64 位 Ubuntu 操作系统。请参阅下面的这一行:
Architecture: i686 # <-- your kernel is 32 bit (32 bit Ubuntu)
CPU op-mode(s): 32-bit, 64-bit # <-- your cpu can handle 32 or 64 bit instructions
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 2800.000
BogoMIPS: 5586.12
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
Run Code Online (Sandbox Code Playgroud)
下载并安装64 位 Ubuntu 14.04.1,然后安装Viber。
| 归档时间: |
|
| 查看次数: |
36675 次 |
| 最近记录: |