2014-10-28 60 views
1

我是C++的初學者並且使用了unix。所以這是我的問題。包括類並使用g ++進行編譯

我在主函數中寫了幾行,而且我需要一個在c_lib庫中定義的函數。

main.cpp中:

#include <iostream> 
#include "c_lib.cpp" 

int main() 
{ 
    return 0; 
} 

我要執行它在終端上,所以我寫了

g++ -c c_lib.cpp 

g++ -c main.cpp 

g++ -o run c_lib.o main.o 

直到這裏,沒有錯誤報告。

然後

./run 

我得到的錯誤

error: ./run: No such file or directory

有什麼不對?

+2

您總是應該用'g ++ -Wall -Wextra -g'進行編譯,例如, 'g ++ -Wall -Wextra -g -c c_lib.cpp' – 2014-10-28 14:08:56

+7

爲什麼你在''main.cpp'中包含'c_lib.cpp'?使用頭文件。 – Mgetz 2014-10-28 14:09:00

+0

非常感謝!什麼是-Wextra和-g? – Susliks 2014-10-28 14:43:36

回答

0

首先,您不應該將源文件包含到其他源中。您應該創建一個頭文件,並把那裏的聲明(即允許main()從c_lib.cpp調用函數或者任何使用全局變量)當您運行g++

你不得不考慮它的輸出,如果操作成功與否。在你的情況下,它失敗了,因此可執行run未被創建。

通常您不會手動調用編譯器,而是編寫makefile並讓make實用程序調用g++

+0

@BartoszKP廢話,Makefiles完全適用於許多場景。 – 2014-10-28 14:15:44

5

包括.cpp通常不會完成,通常只包括標題。標題通常包含定義其他代碼的接口的聲明.cpp
您能告訴我們c_lib的來源嗎?這可能有幫助。

由於c_lib的來源是#include d,因此不需要單獨進行編譯。事實上,這可能會導致錯誤(首先想到多個定義)。你只需要做:

g++ -o run main.cpp 

在這種情況下編譯你的代碼。
(當使用一個頭(.h),您將需要編譯執行(.cpp)seperately)

編譯警告開啓:

g++ -Wall -Wextra -o run main.cpp 

,如果有問題,你會得到更多的產出與您的代碼。

run文件是由gcc輸出的嗎?您可以通過在終端中調用ls進行測試(或者ls run僅在可執行文件存在時才顯示該可執行文件)。

如果可執行文件存在,那可能是它沒有標記爲可運行。如果這是一個問題,我會進入該網站的一般範圍之外(儘管仍然相關)

+0

謝謝,我有指導寫#include「c_lib.cpp」而不是c_lib.h。是的運行文件沒有在那裏,但我不明白爲什麼..因爲我寫了所有的命令:( – Susliks 2014-10-28 14:22:47

+0

你可以發佈'c_lib.cpp'的內容? – Baldrickk 2014-10-28 14:57:51

+0

現在它的工作,但我不能看到現在和之前的區別。我只是使用-Wall而不是-c – Susliks 2014-10-28 16:59:19