
因此,我有一個項目,希望能夠建置為 64 位元二進位檔案和 32 位元二進位檔案。
我的機器本身是64位元的,64位元編譯工作得很好。
我正在使用cake
它來建立我的項目,並使用它set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
來強制進行 32 位元建置。
每當我嘗試建立它時,編譯器都會拋出錯誤,因為我將其包含<iostream>
在我的主程式中。起初它抱怨無法找到<bits/c++config.h>
其中包含哪些內容<iostream>
。
我在網路上找到了一些東西,促使我g++-multilib
在我的系統上安裝。現在以前的錯誤消失了,但我收到的錯誤
/usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory
也源自於#include <iostream>
.
我檢查了這個文件的位置,並在其中找到了它/usr/include/x86_64-linux-gnu/asm/errno.h
(與之前一樣,c++config.h
該x86_64
文件夾似乎未在 32 位元版本中搜尋(這有點有意義)。
我還發現它/usr/include/linux/errno.h
與珍貴的文件相同,但作為您可以看到它不在asm
子資料夾中
。
那麼,為了能夠將我的程式碼(使用#include <iostream>
)編譯為 32 位元可執行文件,我還需要設定什麼?是否有類似 32 位元版本的 std 函式庫?
編輯:
我正在使用 Linux Mint 18.3 以及g++ --version
ofg++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
和cmake v.3.10.2
答案1
好吧,我發現了問題所在:
當我發現時,我必須使用g++-multilib
我繼續在我的套件管理器中搜尋它(synaptic
在我的例子中)。那列出了一堆版本,所以我檢查了g++
我安裝的版本,然後安裝了適當的g++-multilib
包,在我的例子中是g++-7-multilib
.
然而,它沒有安裝的是gcc-multilib
在我的情況下似乎是麻煩製造者的軟體包。安裝後,它按預期工作。
長話短說:如果我g++-multilib
一開始就安裝了(名稱中沒有版本)包,我就不會遇到這個問題。