AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 513260
Accepted
A Umar Mukthar
A Umar Mukthar
Asked: 2014-08-19 22:55:29 +0800 CST2014-08-19 22:55:29 +0800 CST 2014-08-19 22:55:29 +0800 CST

如何在 32 位机器上安装 64 位 .deb 文件?

  • 772

我有 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
software-installation
  • 6 6 个回答
  • 39756 Views

6 个回答

  • Voted
  1. Best Answer
    Braiam
    2014-08-20T17:33:34+08:002014-08-20T17:33:34+08:00

    如果您的硬件支持 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
    

    您可以只安装必要的 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) ...
    

    然后开始遇到问题......

    包管理器决定他们不应该为他们的包列出任何依赖项,

     Installed-Size: 141336
     Conflicts: Viber (<< 4.2.2.6)
     Replaces: Viber (<< 4.2.2.6)
     Maintainer: Viber Media Inc <[email protected]>
    

    他们实际上需要的是:

    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
    

    所以你必须手动找到并安装缺少的库!如果您知道正确的工具,这很容易。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
    

    这些我没有安装,我使用获得的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
    

    apt-file给我 64 位包是一种挑逗,所以我不得不sudo apt-file -a amd64 update强制它具有 64 位文件列表。

    现在,让我解释一下以上内容:

    • ldd /path/to/binary: 读取二进制文件并告诉您需要哪些库、符号等。
    • dpkg -S:搜索哪些软件包提供了特定的已安装文件。
    • awk,sed和grep: 正在修改文本流以仅处理感兴趣的部分或显示所需的输出。
    • |, $(...): 第一个允许我将一个命令的输出通过管道传递给另一个,而后者允许我在执行主要命令之前执行/评估一个命令。

    TL;dr 只需安装这些软件包:

    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
    

    您还需要安装 64 位内核。

    • 22
  2. Amritanshu Pandey
    2014-08-19T23:03:16+08:002014-08-19T23:03:16+08:00

    不可能在 32 位操作系统上安装仅支持 64 位 arch 的软件,反之亦然。为了安装 64 位软件,您需要一个支持 64 位的硬件和一个在其上运行的 64 位操作系统。

    另外我想提一下,无法在仅支持 32 位架构的硬件上将 64 位操作系统安装为虚拟机。您的硬件应支持 64 位架构以及虚拟化支持,以便创建 64 位虚拟机。

    • 11
  3. Vality
    2014-08-20T01:55:39+08:002014-08-20T01:55:39+08:00

    您可以使用动态转换在使用 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 构建的程序,比如为手机构建的程序,稍后可能会出现)我建议你继续前进,但要小心,事情有时需要一点点摆弄或调试才能很好地工作。

    • 10
  4. αғsнιη
    2014-08-20T02:17:27+08:002014-08-20T02:17:27+08:00

    我不得不说你不是真的

    我的电脑只支持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
    

    下载并安装64 位 Ubuntu 14.04.1,然后安装Viber。

    • 10
  5. Naive
    2014-08-19T23:53:24+08:002014-08-19T23:53:24+08:00

    阅读有关 32 位 (x86) 和 64 位应用程序的信息:
    http ://www.techsupportalert.com/content/32-bit-and-64-bit-explained.htm

    有时,一个应用程序或单个包 [一个 .deb 文件] 可能在安装后充当两者。
    即,x86 app on x86 OS和x64 app on x64 OS

    • 1
  6. stan
    2015-05-14T12:02:24+08:002015-05-14T12:02:24+08:00

    如果您运行的是 32 位系统,请使用

    sudo dpkg --force-architecture -i viber.deb

    链接:如何在 Ubuntu 13.10、32 位上安装 Viber

    • -1

相关问题

  • 如何在没有 root 访问权限的情况下安装软件包?

  • 设置 LAMP 堆栈的最简单方法是什么?

  • 我应该在哪里安装 sagemath?

  • How do I install Adobe Flash player?对于 11.10 及更高版本明确修复 11.10 上的 64 位 Flash

  • 如何设置软件中心为非 root 用户安装软件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve