14.04.01 32 位:交叉编译时缺少 g++ 64 位包含文件

14.04.01 32 位:交叉编译时缺少 g++ 64 位包含文件

因此,我安装了 32 位 Xubuntu 14.04.1。我们有一些接口代码,我们打算为我们支持的各种平台发布 SO 和 Windows DLL。(是的,我知道二进制发布不好,但在这里也不相关。)

我正在尝试使用 32 位 14.04.01 构建 32 位和 64 位 SO,使用-m32/ -m64gcc/g++ 参数。32 位版本运行良好,但 64 位版本失败,并出现

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

检查包含的内容,该文件在 32 位中确实存在,但在 64 位中缺失。

通过谷歌搜索该问题,似乎过去在 GCC/G++ 4.6 中也出现过这种情况,但后来被标记为已修复。但 14.04.1 使用的是 GCC/G++ 4.8,这表明 GCC/G++ 4.8 中的这些库出现了回归。还有其他人见过这种情况吗?

如果有必要,我可以为 64 位 14.04.1 设置一个新的 VM,看看它是否会选择正确的库版本。但如果可能的话,我宁愿不这样做,因为我还有很多其他东西需要重新安装。有更好的解决方案吗?如果我安装了 64 位 14.04.1,我是否一定能够交叉编译回 32 位而不会丢失另一个方向的标头?

答案1

64 位 bits/c++config.h 文件在 32 位系统上通过安装包提供(反之亦然)g++-multilib,因此你需要使用软件中心、Synaptic 或通过终端安装该包

sudo apt-get install g++-multilib

这只是一个依赖包,它解析g++-4.8-multilib为默认的 gcc/g++ 版本,进而依赖于lib64stdc++-4.8-dev(32 位上的 64 位编译)或libx32stdc++-4.8-dev(64 位上的 32 位编译)——这些包含实际的头文件。

有一组与普通 C 编译器等效的软件包gcc

相关内容