C++

C++ 在 64 位系統上建構 32 位二進製文件

  • January 18, 2019

所以我有一個項目,我希望能夠將其建構為 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子文件夾中。

顯然我可以手動將它移動到該文件夾中,但我覺得我的設置通常有問題。

那麼我還需要設置什麼才能將我的程式碼(使用 a #include <iostream>)編譯為 32 位執行檔?有類似 32 位版本的標準庫嗎?

編輯:

我正在使用帶有g++ --versionofg++ (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(名稱中沒有版本)包,我就不會遇到這個問題。

引用自:https://unix.stackexchange.com/questions/495227