所以我有一个项目,我希望能够将其构建为 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
(与以前一样,在 32 位版本中似乎没有搜索c++config.h
该文件夹(这有点道理)。
我还发现它与珍贵的相同,但作为您可以看到它不在子文件夹中。
显然我可以手动将其移动到该文件夹中,但我觉得我的设置通常有问题。 x86_64
/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
(名称中没有版本)包,我就不会遇到这个问题。