如何在64位Linux系統上編譯32位程式

2021-10-01 13:35:07 字數 2154 閱讀 9454

在64位的ubuntu,gcc8.2.0的系統上,如何編譯乙個32的程式?

查詢gcc文件可知,編譯64位程式使用-m64選項,例如:

gcc -m64 -o3 index.c -o index   //該程式只能在64位機器上執行
編譯32位程式使用-m32選項,例如:

gcc -m32 -o3 index.c -o index   //該程式可以在32位或64位機器上執行
但是如果編譯32位系統報如下錯誤:

/usr/bin/ld: skipping incompatible /home/zgl/gcc-8.2.0-exe/lib/gcc/x86_64-pc-linux-gnu/8.2.0/libgcc.a when searching for -lgcc

/usr/bin/ld: cannot find -lgcc

/usr/bin/ld: cannot find -lgcc_s

collect2: error: ld returned 1 exit status

此時可能有兩個原因:第一是你安裝gcc時../configure配置裡面使用了--disable-multilib,導致沒有安裝系統庫,第二個原因可能是你安裝的gcc-multilib、g++-multilib庫版本和你的gcc版本不匹配。

嘗試1:

// 比如我gcc-8.2.0版本,使用如下命令安裝multilib的話是安裝的gcc-8.3.0版本

// 有些情況是,安裝完成之後,系統自帶的gcc能使用-m32了,但是自己安裝的gcc還是不能使用

apt-get

install gcc-multilib g++-multilib

或者apt-get

install gcc-8-multilib g++-8-multilib

// 使用apt-get install gcc-8.2-multilib g++-8.2-multilib是不行的

嘗試2:

修改usr/bin/gcc/usr/bin/ld,強制加入m32資訊

經過嘗試了以上方式,我的問題依然沒有解決,於是我刪除了gcc-8.2.0重新安裝讓它支援multilib,安裝命令如下:

wget

wget

wget

wget

tar xzvf gcc-8.2.0.tar.gz

tar -jxvf gmp-6.1.0.tar.bz2

tar -xzvf mpc-1.0.3.tar.gz

tar -jxvf mpfr-3.1.4.tar.bz2

mv gmp-6.1.0 gcc-8.2.0/

mv mpc-1.0.3 gcc-8.2.0/

mv mpfr-3.1.4 gcc-8.2.0/

cd gcc-8.2.0/

// 2.建立軟連線

ln -s gmp-6.1.0/ gmp

ln -s mpc-1.0.3/ mpc

ln -s mpfr-3.1.4/ mpfr

// 3.建立編譯目錄

mkdir gcc-build

cd gcc-build/

// 4.配置configure 此時使用 --enable-multilib安裝

../configure cflags=

"-g3 -gdwarf-2 -o0" cxxflags=

"-g3 -gdwarf-2 -o0" cflags_for_target=

"-g3 -gdwarf-2 -o0" cxxflags_for_target=

"-g3 -gdwarf-2 -o0" --enable-multilib --enable-languages=c,c++,fortran --prefix=/home/zgl/gcc-8.2.0-exe

// 5.編譯安裝

make -j 32

make

install

安裝完成之後我再source gcc,執行gcc -m32 -o3 index.c -o index便能成功了。

references:

如何在linux 32位機器編譯64位程式

編譯64位程式,不一定要編譯機器是64位的,但是32位機器預設安裝的gcc編譯環境還是不能用來編譯64位程式。編譯64位程式,需要加上 m64編譯器引數,預設安裝的gcc已經支援該引數,但是缺少64位機器指令相關的檔案,所以不能編譯,會出現下面的錯誤 plain view plain copy in...

VirtualBox上安裝64位系統

原來virtualbox安裝64位的系統需要滿足以下條件 1.64位的cpu 2.安裝的系統必須為64位 3.cpu允許硬體虛擬化 前面兩個條件都滿足,那就是第三個條件的問題了。這裡補充說明 硬體虛擬化其實就是cpu的虛擬化技術。intel的叫vt x,amd的叫amd v。支援虛擬技術的cpu帶有...

如何分析64位系統上32位程式的dump

隨著硬體越來越便宜,為了能夠識別大於4g的記憶體,越來越多的電腦使用64位的作業系統,然後現在大多數的軟體還是32位的,64位的系統使用wow64來幫助執行32位的程式。如果乙個64位系統上,32位程式出現crash,得到乙個dump檔案,如果不進行轉換是不能直接用windbg分析的。下面介紹如何處...