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 位編譯選項
