如何在64位的Linux中运行32位的应用程序

作者&投稿:吴詹 (若有异议请与网页底部的电邮联系)
如何在64位的linux中运行32位的应用程序~

 大部分Linux发行套件都有针对x86_64处理器的版本。比较典型的x86_64的处理器有ADM Athlon II和英特尔Xeon。因为这些Linux发行套件都有自己专用的软件源,这些软件源会为提供所有它所支持的应用软件的二进制包。如果你满足于Linux的安装方式,你可能不会需要运行32位的程序。
  一些Linux商业软件,尤其是游戏,只提供32的版本。因为某些特殊的理由,你可能需要配置你的电脑来运行32位的软件。
  安装32位的支持库
  因为x86_64处理器是为x86技术涉及,所以它也是支持32位程序的。在Linux里,你所需要做的就是为这些软件安装必要的软件库。幸运的是,大部分Linux发行版本已经将这些打包好了。比方在Ubuntu里,这个包就叫做ia32-libs。为了安装它,你可以打开一个终端,然后输入下面的内容:
  sudo apt-get install ia32-libs
  在Kubuntu中,你也可以通过Synaptic和Kpackagekit在图形界面下安装。一旦安装了之后,像游戏之类的软件就不再需要更多的配置。
  图形问题
  当你在一个64位的环境中运行32位的软件时,Ubuntu仍然会去寻找默认的GTK引擎。这样导致一个wrong ELF class的报错。这种情况在你运行某些特定的软件的时候特别恼人,比方说Chrome,一款新的谷歌浏览器开源版本。Ubuntu确实已经将32位版本的GTK引擎安装在了 /usr/lib32/gtk-2.0,但是我所使用的GTK项目并没有在这个位置找到。快速的解决方法如下:
  1、为你现在用的主题找到32位包。比方说我,我查找了ubuntu packages
  2、下载包,然后将包解压缩
  3、为主题找到库文件
  4、将库拷贝到lib32路径:
  sudo cp ~/download-directory/usr/lib/gtk-2.0/2.10.0/engines/libqtcurve.so /usr/lib32/gtk-2.0/2.10.0/engines/
  比方说Chrome,它的需要可以设置在启动脚本里: /user/lib32/gtk-2.0如果程序的启动脚本在你运行的时候没有去看,而是去寻找 /user.lib/gtk-2.0,你可能需要修改启动脚本或者在终端里输出并设置一个环境变量:
  export GTK_PATH=/usr/lib32/gtk-2.0 command-to-start-app
  如果一个程序没有启动脚本,你可以像上面那样设置下环境变量。

在64位的Linux下,gcc 编译 32 位程序需要添加参数 -m32 ,ld需要添加参数是 -m elf_i386。
1、Along with the -m32 flag in gcc, you may need to include the -melf_i386 flag for ld to properly link the 32bit object files to the 32bit libraries if you have both the 32bit and 64bit libraries.
2、 ld命令 ld命令是GNU的连接器,将目标文件连接为可执行程序。
3、举例:

gcc -m32 -o hello hello.c

gcc -m32 -c hello.o hello.c
ld -m elf_i386 -o kernel main.o hello.o

 大部分Linux发行套件都有针对x86_64处理器的版本。比较典型的x86_64的处理器有ADM Athlon II和英特尔Xeon。因为这些Linux发行套件都有自己专用的软件源,这些软件源会为提供所有它所支持的应用软件的二进制包。如果你满足于Linux的安装方式,你可能不会需要运行32位的程序。
  一些Linux商业软件,尤其是游戏,只提供32的版本。因为某些特殊的理由,你可能需要配置你的电脑来运行32位的软件。
  安装32位的支持库
  因为x86_64处理器是为x86技术涉及,所以它也是支持32位程序的。在Linux里,你所需要做的就是为这些软件安装必要的软件库。幸运的是,大部分Linux发行版本已经将这些打包好了。比方在Ubuntu里,这个包就叫做ia32-libs。为了安装它,你可以打开一个终端,然后输入下面的内容:
  sudo apt-get install ia32-libs
  在Kubuntu中,你也可以通过Synaptic和Kpackagekit在图形界面下安装。一旦安装了之后,像游戏之类的软件就不再需要更多的配置。
  图形问题
  当你在一个64位的环境中运行32位的软件时,Ubuntu仍然会去寻找默认的GTK引擎。这样导致一个wrong ELF class的报错。这种情况在你运行某些特定的软件的时候特别恼人,比方说Chrome,一款新的谷歌浏览器开源版本。Ubuntu确实已经将32位版本的GTK引擎安装在了 /usr/lib32/gtk-2.0,但是我所使用的GTK项目并没有在这个位置找到。快速的解决方法如下:
  1、为你现在用的主题找到32位包。比方说我,我查找了ubuntu packages
  2、下载包,然后将包解压缩
  3、为主题找到库文件
  4、将库拷贝到lib32路径:
  sudo cp ~/download-directory/usr/lib/gtk-2.0/2.10.0/engines/libqtcurve.so /usr/lib32/gtk-2.0/2.10.0/engines/
  比方说Chrome,它的需要可以设置在启动脚本里: /user/lib32/gtk-2.0如果程序的启动脚本在你运行的时候没有去看,而是去寻找 /user.lib/gtk-2.0,你可能需要修改启动脚本或者在终端里输出并设置一个环境变量:
  export GTK_PATH=/usr/lib32/gtk-2.0 command-to-start-app
  如果一个程序没有启动脚本,你可以像上面那样设置下环境变量。

大部分都可以的,因为64位系统是兼容32位软件的。


尉氏县18941317692: 如何在64位的Linux中运行32位的应用程序 -
睢沿丹佐: 你好,解决方法如下:常规做法,先添加32bit架构:sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 然后,你再安装或者直接运行你的32位程序.

尉氏县18941317692: 如何在64位的Linux中运行32位的运用 程序 -
睢沿丹佐: 直接就可以运行.比如你在32位linux下编译了一个HelloWorld,在64位linux下直接:./HelloWorld就可以了.

尉氏县18941317692: 如何在64位的Linux中运行32位的应用程序 -
睢沿丹佐: 比较典型的x86_64的处理器有ADM Athlon II和英特尔Xeon.因为这些Linux发行套件都有自己专用的软件源,这些软件源会为提供所有它所支持的应用软件的二进制包.如果你满足于Linux 的安装方式,你可能不会需要运行32位的程序. 一些...

尉氏县18941317692: 怎样让64位linux支持32 -
睢沿丹佐: Linux和Win不一样,64位系统不能运行32位应用.尝试安装ia32吧,如果是Debian/Ubuntu系列: sudo apt-get install ia32-libs

尉氏县18941317692: linux64位系统怎么样兼容32位程序 -
睢沿丹佐: 用来干啥?如果是用32位编译器的话可以考虑一下下面的 装个ia32-libs sudo apt-get install ia32-libs 如果太旧了没有就装个lib32ncurses5 sudo apt-get install lib32ncurses5

尉氏县18941317692: 如何在64位linux强制编译32位应用程序 -
睢沿丹佐: 理论上安装支持环境,之后 64 位的 gcc 编译成 32 位程序,就加 -m32 参数即可. 当然还一个办法是装个 32 位的 gcc . 另外,交叉编译也适用于 x86 架构. 不过这么编译经常会出现各种问题,所以编译 32 位的程序,最好还是用 32 位系统. 不一...

尉氏县18941317692: 64位linux运行32位程序可以吗 -
睢沿丹佐: 32位程序想要在64位系统中运行,系统必须包含独立的32位的库文件.如 archlinux x86_64系统,添加(反注释)软件源12 [multilib] Include = /etc/pacman.d/mirrorlist 启用 multilib 的 64 位系统使用了类似 Debian 的目录结构. 32位库位于 /usr/lib32/, 而64位库位于 /usr/lib/.

尉氏县18941317692: 64位linux编译32位程序 -
睢沿丹佐: 这个比较麻烦.首先你要装好全套的 32 位对应的开发编译支持环境和对应的运行环境,之后还要设置你这个软件编译时用 32 位的参数和 32 位的编译器.你这个其实等同于交叉编译.

尉氏县18941317692: 如何在64bit linux系统上安装32bit wine方法 -
睢沿丹佐: 以Ubuntu为例说明 一、安装安装lxc1、安装lxc sudo apt-get install lxc lxc-templates2、现在创建一个32位的容器,并把目录绑定到容器:sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i3863、然后启动容器;在控制台输入用...

尉氏县18941317692: 64位linux平台 编译32位程序 -
睢沿丹佐: GCC 会根据编译参数去区别调用不同的数据去编译.src.rpm 用 --target=i686 就行了.rpmbuild 会自己调用对应的编译器和参数(前提是你的 rpm 内部设置都正确).其实这里编译器的问题不大,主要是开发环境必须全.但环境的问题在于,编译 32 和 64 是需要两套环境的.虽然 Linux 系统可以 32、64 共存,但实际上他们是两套东西,内核层面去区别读取来运行的.所以你的 64 位环境,需要一套完整的编译这个程序的 32 位环境才可以,而且这个软件没有自作聪明去做环境检测,不然他自己识别错误可能会导致编译过程中搞错而出混乱.但有些软件的开发环境,32 和 64 位不能共存.

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网