C ++找不到包含

c++ fails to find includes

刚刚在 debian 7 中安装 build-essentinals。 但我注意到 c++ 的包含在 /usr/include/c++/4.7... 有人知道为什么吗?据我记得,包括曾经在 /usr/include 中...

现在一切都失败了... 即

main.c:2:20: fatal error  iostream: No such file or directory

即使我将它包含在 -I 中,headers 也是从 headers 调用的,它不会找到任何东西,例如:

/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory

所以因为位不在 /usr/include 但在 /usr/include/c++/4.7 编译器找不到它...

我正在使用 g++

crafter# g++ -o craft main.cpp 
In file included from /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h:40:0,
                 from /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h:414,
                 from /usr/include/c++/4.7/iostream:39,
                 from main.cpp:2:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory

编译终止。

有人知道如何解决这个问题吗?

感谢您的帮助!

只需将 include directlory 放入编译器的 -I 参数中,例如:

$(CC) -I/usr/include/c++/4.7 ...

您正在使用 gcc 编译 C++ 代码,这导致 header 查找过程中未考虑 C++ 系统 header。请改用 g++ 命令。

此外,您应该将 main.c 重命名为 main.cpp,因为您使用的是 C++ 功能。

最后,用gcc编译一个.cpp文件将清除预处理和编译阶段,但链接失败,因为不会隐式添加libstdc++

您的命令行应类似于 g++ main.cpp -o outname

显然是 32/64 bit mixup。通过为 32 位版本安装 libc6-dev-i386 或为 64 位版本安装解决。

Stefano Sanfilipo 表示,确实存在 32 位和 64 位库的混淆。

我按照建议通过删除所有开发包解决了问题:

apt-get remove --purge libc6-dev
apt-get remove --purge libc6-dev-i386

然后重新安装:

apt-get install build-essential

现在可以完美编译了。

虽然 MSalters 也看到了这个问题,但在这种情况下我应该怎么做才能让双方都得到信任?

此致,

大卫