2015-02-23 42 views
2

刚刚安装的build-essentinals在debian 7中。 但是我注意到C++的包含在/ usr/include/C++/4.7中...... 有没有人为什么?包括用于在/ usr/include中,据我记得......C++找不到包括

现在一切都失败... 即

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

即使我包括它-I,头被称为从标题和它不会找到任何东西,如:

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

所以怎么一回事,因为位是不是在/ usr /包括但/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 

编译终止。

任何人都知道如何解决这个问题?

感谢您的帮助!

+0

是'gcc'和'G ++'安装包? – GoBusto 2015-02-23 12:42:24

+0

@GoBusto'gcc'和'g ++'是'build-essential'的依赖关系,所以是的。 – 2015-02-23 12:52:38

回答

1

一个由Stefano Sanfilipo声明,确实有一个混合与32位和64位库。

我解决的建议移除所有的开发包:

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

然后再重新安装:

apt-get install build-essential 

现在它完全编译。

虽然MSalters也看到了这个问题,我在这种情况下做了什么让双方都得到了信用?

问候,

大卫

0

简单地说包括在-I参数编译directlory,是这样的:

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

这不是一个好的解决方案,因为总体问题仍然存在 - 这些系统包括海报有问题,他们不应该需要使用“-I”。 – nzc 2016-03-01 15:19:52

6

您正在使用gcc编译C++代码,这会导致C++的头查找过程没有考虑系统头。改用g++命令。

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

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

您的命令行应该看起来像g++ main.cpp -o outname

+0

你好,我正在使用g ++ – 2015-02-23 13:18:03

+1

@DavidVillasmil >>>'此外,你应该重命名main.c到main.cpp' – HolyBlackCat 2015-02-23 13:20:31

+1

请检查你安装的'libc6-dev'的架构目标。它必须是'amd64',但你可能有某种方式得到'i686'版本。你可以用'dpkg -l libc6-dev'来做到这一点。 – 2015-02-23 13:25:45