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.h
該x86_64
文件夾似乎沒有在 32 位版本中被搜尋(這有點道理)。我還發現它
/usr/include/linux/errno.h
與珍貴的相同,但作為你可以看到它不在asm
子文件夾中。顯然我可以手動將它移動到該文件夾中,但我覺得我的設置通常有問題。
那麼我還需要設置什麼才能將我的程式碼(使用 a
#include <iostream>
)編譯為 32 位執行檔?有類似 32 位版本的標準庫嗎?編輯:
我正在使用帶有
g++ --version
ofg++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
和的 Linux Mint 18.3cmake v.3.10.2
好吧,我發現了問題所在:
當我發現時,我不得不使用
g++-multilib
我繼續在我的包管理器中搜尋它(synaptic
在我的情況下)。那一個列出了一堆版本,所以我檢查了g++
我安裝的版本,然後我安裝了適當的g++-multilib
-package,在我的情況下是g++-7-multilib
.但是,它沒有安裝的是
gcc-multilib
在我的情況下似乎是麻煩製造者的軟體包。安裝後,它按預期工作。長話短說:如果我一開始就安裝了
g++-multilib
(名稱中沒有版本)包,我就不會遇到這個問題。