2017-09-05 240 views
0

編輯:找到了答案,這是一個簡單的錯誤。我不認爲這是重複的,因爲我知道錯誤表明了什麼(主函數無法找到對象類的引用),我只是認爲我已經正確地包含了它,並且需要另一組眼睛指向在我的makefile行中輸出錯誤。g ++編譯失敗,Cmake不編譯

如果我使用了錯誤的術語,或者我誤解了一些簡單的東西,我會提前道歉。我對C和C#略微熟悉,這是我嘗試使用C++的嘗試。代碼中還存在其他問題,例如命名不一致,但請忽略它們,因爲它們不是問題所在。我也正在重組/重寫這個項目,所以請原諒。

我有什麼

我一直在寫使用VIM小C++應用程序和使用G ++被編譯它。它一直持續到一點。這個錯誤對我來說沒有意義,所以我決定嘗試Clion試圖調試它,但是,讓我吃驚的是,它構建並按預期運行。

從終端,我進入項目的根目錄(以上src一個級別),並運行make

g++ -c src/item.cpp -o obj/item.o 
g++ -c src/hero.cpp -o obj/hero.o 
g++ -c src/main.cpp -o obj/main.o 
g++ -o oChre.exe obj/hero.o obj/main.o -lm 
obj/main.o: In function `main': 
main.cpp:(.text+0x467): undefined reference to Hand::Hand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 
main.cpp:(.text+0x49e): undefined reference to `Item::getName[abi:cxx11]()' 
collect2: error: ld returned 1 exit status 
makefile:7: recipe for target 'program' failed 
make: *** [program] Error 1 

從內克利翁,我只需點擊建立運行和項目的構建和運行正如我所期望的那樣。

什麼我懷疑是問題

我的makefile文件如下:

CC=g++ 
EXT=o 
PURGE=rm 

#The main bin 
program: item.o hero.$(EXT) main.$(EXT) 
    $(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm 
main.o: 
    $(CC) -c src/main.cpp -o obj/main.o 

#Creatures 
hero.o: 
    $(CC) -c src/hero.cpp -o obj/hero.o 

#items 
item.o: 
    $(CC) -c src/item.cpp -o obj/item.o 

clean: 
    $(PURGE) obj/*.$(EXT) *.exe 

我懷疑克利翁是不是用我的makefile作爲IDE的通常是能夠確定的編譯什麼和如何對他們的擁有。這就是我認爲Clion成功運行的原因。

什麼能解決我的問題

我想,如果有人能夠回答以下問題之一或全部:

  1. 爲什麼G ++不正確編譯?我的makefile有什麼問題,或者我的編譯器配置不當?我預計這個項目將來會擴展,所以值得維護我自己的makefile或者我應該把它留給IDE。
  2. 爲什麼Clion會編譯我的代碼?我可以只獲取生成的makefile並將其放入我的repo中,以便其他人可以編譯它?

如果我缺少重要的東西,請詢問我是否有GitHub上的所有代碼。

+1

寫作首先要通過的文件是手要學會理解彙編是如何工作的一個好辦法。在使用IDE/cmake構建時調試問題時可能會有所幫助。當項目變大CMake或IDE將爲您節省很多維護makefile中相關性的工作。 CMake在以前使用最多的自動工具的平臺代碼中很受歡迎,但這些代碼很難學習。 – Eelke

+0

可能的重複:[什麼是未定義的引用/未解析的外部符號錯誤,以及如何解決它?](https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –

+0

[什麼是未定義的引用/未解析的外部符號錯誤,以及如何修復它?](https://stackoverflow.com/questions/12573816/ what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Tsyvarev

回答

2

您的鏈接命令缺少項目。Ø

#The main bin 
program: item.o hero.$(EXT) main.$(EXT) 
    $(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm 

應該

#The main bin 
program: item.o hero.$(EXT) main.$(EXT) 
    $(CC) -o oChre.exe obj/item.o obj/hero.$(EXT) obj/main.$(EXT) -lm 
+0

我知道我錯過了一些簡單的東西。謝謝! –