2017-09-05 263 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

我知道我错过了一些简单的东西。谢谢! –