64位linux下的GCC如何编译出一个32位可执行程序?

64位linux下的GCC如何编译出一个32位可执行程序?,第1张

理论上安装支持环境,之后64位的gcc编译成32位程序,就加-m32参数即可。

当然还一个办法是装个32位的gcc。

另外,交叉编译也适用于x86架构。

不过这么编译经常会出现各种问题,所以编译32位的程序,最好还是用32位系统。

不一定重装,用chroot和setarch命令配合即可弄出一个32位的子系统。

一般64位系统最好不要安装32位库的-dev,经常有冲突,强行安装会破坏64位环境,头文件并不像共享库分得那么完美。

我觉得比较好的做法是,重新把某一个文件夹当成rootfs,在里面安装各种32位的库和库-dev,然后给gcc传递参数"--sysroot=路径"就可以让gcc重新选取那个文件夹为rootfs,而不再认为/为rootfs。

安装32位的兼容库就行了。

Ubuntu:sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386

最后安装一下ncurses库:apt-get install libncurses5:i386

好了OK~~~

以Ubuntu为例说明

一、安装安装lxc

1、安装lxc

sudo apt-get install lxc lxc-templates

2、现在创建一个32位的容器,并把目录绑定到容器:

sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386

3、然后启动容器在控制台输入用户名和密码。

sudo lxc-start -n my32bitbox

4、在/etc/apt/sources.list中添加内容

sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >>/etc/apt/sources.list"

5、安装先决条件

sudo apt-get install software-properties-common

sudo add-apt-repository ppa:ubuntu-wine/ppa

sudo apt-get update

sudo apt-get build-dep wine # 如果失败使用 sh install-wine-deps.sh cd $HOME mkdir wine32 cd wine32 ~/wine-git/configure make -j4

6、关闭容器

sudo shutdown -h now

二、安装chroot Method

1、安装

sudo apt-get install schroot debootstrap

2、创建配置文件

sudo editor /etc/schroot/chroot.d/precise_i386.conf

3、添加内容

[precise_i386] description=Ubuntu Precise personality=linux32 directory=/srv/chroot/precise_i386 root-users=your_username type=directory users=your_username

4、创建的Ubuntu的chroot环境

sudo mkdir -p /srv/chroot/precise_i386

sudo debootstrap --variant=buildd --arch=i386 precise /srv/chroot/precise_i386 http://archive.ubuntu.com/ubuntu/

5、使在chroot内apt-get的工作:

sudo cp /etc/apt/sources.list /srv/chroot/precise_i386/etc/apt/

6、进入chroot:

schroot -c precise_i386 -u root

7、得到基础包

apt-get update apt-get install ubuntu-minimal

sudo apt-get install software-properties-common

8、安装构建依赖关系:

apt-get build-dep wine

如果报错:E: You must put some 'source' URIs in your sources.list

则执行

add-apt-repository ppa:ubuntu-wine/ppa apt-get update

9、下载Wine源

apt-get install git git clone git://source.winehq.org/git/wine

10、编译

cd wine

./configure make

11、运行

export DISPLAY=:0

./wine notepad

12、在chroot外部执行

exit

sudo apt-get install wine

exit

cd wine

./wine notepad

三、手动连接库的方法

1、执行下面代码

sudo apt-add-repository ppa:ehoover/compholio

sudo apt-get update

sudo apt-get install ia32-libs-dev

2、或者设置符号连接

cd /usr/lib/i386-linux-gnu

sudo ln -s libfreetype.so.6 libfreetype.so

sudo ln -s libX11.so.6 libX11.so

sudo ln -s libXau.so.6 libXau.so

sudo ln -s libXcursor.so.1 libXcursor.so

sudo ln -s libXi.so.6 libXi.so

sudo ln -s libXext.so.6 libXext.so

sudo ln -s libXxf86vm.so.1 libXxf86vm.so

sudo ln -s libXrandr.so.2 libXrandr.so

sudo ln -s libXrender.so.1 libXrender.so

sudo ln -s libXinerama.so.1 libXinerama.so

sudo ln -s libXcomposite.so.1 libXcomposite.so

sudo ln -s libGLU.so.1 libGLU.so

sudo ln -s libOSMesa.so.6 libOSMesa.so

sudo ln -s libgnutls.so.26 libgnutls.so

sudo ln -s libsane.so.1 libsane.so

sudo ln -s libv4l1.so.0 libv4l1.so

sudo ln -s libv4l2.so.0 libv4l2.so

sudo ln -s liblcms.so.[0-9] liblcms.so

sudo ln -s libcapi20.so.3 libcapi20.so

sudo ln -s libcups.so.2 libcups.so

sudo ln -s libfontconfig.so.1 libfontconfig.so

sudo ln -s libgsm.so.1 libgsm.so

sudo ln -s libtiff.so.[0-9] libtiff.so

sudo ln -s libmpg123.so.0 libmpg123.so

sudo ln -s libodbc.so.1 libodbc.so

sudo ln -s libopenal.so.1 libopenal.so

sudo ln -s libldap-2.4.so.2 libldap.so

sudo ln -s libldap_r-2.4.so.2 libldap_r.so

sudo ln -s liblber-2.4.so.2 liblber.so

sudo ln -s libxml2.so.2 libxml2.so

sudo ln -s libxslt.so.1 libxslt.so

sudo ln -s libssl.so.0.9.8 libssl.so

sudo ln -s libcrypto.so.0.9.8 libcrypto.so

sudo ln -s libjpeg.so.8 libjpeg.so

sudo ln -s mesa/libGL.so libGL.so

cd /usr/lib/i386-linux-gnu/mesa

sudo ln -s libGL.so.1 libGL.so

cd /lib/i386-linux-gnu

sudo ln -s libdbus-1.so.3 libdbus-1.so

sudo ln -s libpng12.so.0 libpng12.so

sudo ln -s libncurses.so.5 libncurses.so

3、可能还需要的32位libraries

sudo apt-get install libosmesa6:i386 libosmesa-dev libjpeg-turbo8-dev:i386


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9021959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存