C++ 在 64 位元系統上建置 32 位元二進位檔案

C++ 在 64 位元系統上建置 32 位元二進位檔案

因此,我有一個項目,希望能夠建置為 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.hx86_64文件夾似乎未在 32 位元版本中搜尋(這有點有意義)。
我還發現它/usr/include/linux/errno.h與珍貴的文件相同,但作為您可以看到它不在asm子資料夾中

那麼,為了能夠將我的程式碼(使用#include <iostream>)編譯為 32 位元可執行文件,我還需要設定什麼?是否有類似 32 位元版本的 std 函式庫?

編輯:
我正在使用 Linux Mint 18.3 以及g++ --versionofg++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0cmake v.3.10.2

答案1

好吧,我發現了問題所在:
當我發現時,我必須使用g++-multilib我繼續在我的套件管理器中搜尋它(synaptic在我的例子中)。那列出了一堆版本,所以我檢查了g++我安裝的版本,然後安裝了適當的g++-multilib包,在我的例子中是g++-7-multilib.

然而,它沒有安裝的是gcc-multilib在我的情況下似乎是麻煩製造者的軟體包。安裝後,它按預期工作。


長話短說:如果我g++-multilib一開始就安裝了(名稱中沒有版本)包,我就不會遇到這個問題。

相關內容