OpenEuler gcc生成32位程序
问题
由于编程需要,现需在 64位 OpenEuler 操作系统下,生成32位程序。
OpenEuler的软件包中没有提供 gcc-multilib 的安装。
检查 cd /usr/include/gnu/
缺少 stubs-32.h
解决
1.在ubuntu中安装 multilib
库
在Ubuntu
中可以直接通过 apt install gcc-multilib
2.将 缺少的头文件 复制到openeuler中
此时再次 编译32位文件会出现
提示缺少crtn.o
crt1.o
crti.o
-lgcc
-lgcc_s
-lc
也就是 libgcc.a
libgcc_s.so
这两个文件存在差异
检查/usr/lib/gcc/x86_64-linux-gnu/7.3.0/
果然如此
3.将 以上文件 从 ubuntu 复制到 openeuler中
找到 crtn.o
crt1.o
crti.o
文件路径
将 crtn.o
crt1.o
crti.o
从 ubuntu 复制到 openeuler中
替换 libgcc.a
libgcc_s.so
(须保持gcc版本相同,注意备份)
此方法比较麻烦复杂且改写libgcc文件时可能引起其他错误(不推荐使用)
方法二
1.在官网下载multilib包
x86架构:
地址:https://packages.debian.org/sid/i386/gcc-multilib/download
amd64架构:
地址:https://packages.debian.org/sid/amd64/gcc-multilib/download
选择任意链接保存即可
2.在openeuler上安装dpkg包管理工具
3.使用dpkg安装gcc-multilib
ps:此方法适用于有对应gcc版本情况
方法三
源码编译gcc时 选项配置 enable 32 位编译选项