2015-02-23 84 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