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