Ubuntu 64位編譯32位程式

2021-09-23 06:06:42 字數 1307 閱讀 6939

title: ubuntu 64位編譯32位程式

一般情況下,乙個平台上只能編譯當前平台對應的應用程式,比如,64位平台編譯64位應用程式,但是隨著64位平台的普及,多數採用了64位作業系統,而有時又基於某些原因需要編譯出32位的應用程式.

本文旨在說明如何在64位作業系統上編譯出32位應用程式.

$ dpkg --print-architecture	#amd64
$ dpkg --print-foreign-architectures #i386

# 如果沒有,則需要手動開啟,依次執行:

$ sudo dpkg --add-architecture i386

$ sudo

apt-get update

$ sudo

apt-get dist-upgrade

sudo

apt-get

install gcc-multilab g++-multilib

用gcc編譯時,需要新增-m32選項,但是在引用外部庫的情況下,需要採用使用-m elf_i386引數可以使得64位的ld能夠相容32位的庫. 但是編譯時是使用自己的乙個命令,所以沒有辦法給他加引數,但是這個命令也是要呼叫gcc和ld得,所以我們可以通過修改gcc和ld來解決,也就是將上述的兩個支援32位編譯連線的引數預設給加上去:

#!/bin/sh

ld.bin -m elf_i386 $@

這樣就保證呼叫時將需要的引數加上,然後再呼叫真正的引數.

每次在32位編譯和64位編譯之間切換的時候都要用mv指令移動,會很麻煩,可以用如下指令碼來完成:

#!/bin/sh

mv -i /usr/bin/gcc /usr/bin/gcc.sh

mv -i /usr/bin/ld /usr/bin/ld.sh

mv -i /usr/bin/gcc.bin /usr/bin/gcc

mv -i /usr/bin/ld.bin /usr/bin/ld

#!/bin/sh

mv -i /usr/bin/gcc /usr/bin/gcc.bin

mv -i /usr/bin/ld /usr/bin/ld.bin

mv -i /usr/bin/gcc.sh /usr/bin/gcc

mv -i /usr/bin/ld.sh /usr/bin/ld

執行指令碼後,直接採用gcc編譯即可.

Ubuntu64位系統執行32位程式

13.10以前版本 sudo apt get install ia32 libs 13.10以後版本 sudo dpkg add architecture i386 出現32位依賴問題時,系統就會自動安裝32位的包 sudo apt get update sudo apt get dist upgr...

64位Ubuntu上編譯32位程式

1.確認主機為64位架構的核心,應該輸出為adm64,執行 dpkg print architecture 2.確認開啟了多支架功能,應該輸出為i386,執行 dpkg print foreign architectures 如果沒有,則需要手動開啟,依次執行 sudo dpkg add archi...

Ubuntu 64位安裝arm交叉編譯工具

軟體 arm linux gcc 4.3.2.tgz 解壓軟體包 tar xvf arm linux gcc 4.3.2.tgz命令列輸入以上命令,將軟體解壓至當前路徑下。安裝32位編譯環境軟體支援軟體包 sudo apt get install lib32ncurses5 lib32z1 lib3...