如何在64位Linux系统上编译32位程序

在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,安装命令如下:

// 1.下载源码、解压
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/gmp-6.1.0.tar.bz2
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpc-1.0.3.tar.gz
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpfr-3.1.4.tar.bz2
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:

  • https://blog.csdn.net/x356982611/article/details/79056089
  • https://blog.csdn.net/xiaogugood/article/details/37931089

你可能感兴趣的:(Linux)