2017-09-05 4 views
0

EDIT : 답변을 찾지 못했으며 간단한 실수였습니다. 이 오류가 무엇을 나타내는 지 알기 때문에 (객체 클래스에 대한 참조를 찾을 수 없다는 것을 알기 때문에) 이것이 중복 된 것 같지 않습니다. 나는 그것을 적절하게 포함 시켰고 또 다른 눈의 집합이 필요하다고 생각했습니다. 내 메이크 파일 줄의 오류.g ++ 컴파일에 실패했습니다. Cake은

잘못된 용어를 사용하면 사전에 사과하거나 간단한 것을 오해하고 있습니다. 나는 C와 C#에 약간 익숙하며 이것은 C++을 시도한 나의 시도이다. 불일치를 명명하는 것과 같은 다른 문제가 코드에 있지만 문제가 아니기 때문에이를 무시하십시오. 나는 또한 프로젝트를 재구성/재색 과정 중에 있으므로 혼란을 용서하십시오.

내가 가진 내가 정력를 사용하여 작은 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 

에서 Clion 내부에, 난 그냥 실행하고 빌드를 클릭 프로젝트는 내가 기대했던대로 빌드하고 실행합니다.

은 내가 의심하는 것은 다음과 같이

내 메이크 인 문제인가 : IDE의의 방법에 컴파일 할 것을 결정 일반적으로 할 수있는 등 내가 Clion 내 메이크 파일을 사용하지 않는 의심

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 

을 자신의 개인적인. 이것이 내가 Clion이 성공적으로 운영되고 있다고 생각하는 이유입니다.

내 문제 어떻게 해결할

누군가가 다음과 같은 질문 중 하나 또는 둘 모두 대답 할 수 있다면 내가 좋아하는 것 :

  1. 왜 g ++ 제대로 컴파일하지 않습니다? 내 makefile에 문제가 있거나 컴파일러가 잘못 구성 되었습니까? 나는이 프로젝트가 앞으로 확장 될 것으로 기대한다. 그래서 내 자신의 메이크 파일을 유지할 가치가있을 것인가 아니면 그냥 IDE에 맡겨 두어야 할까?
  2. Clion이 내 코드를 컴파일하는 이유는 무엇입니까? 다른 사람들이 컴파일 할 수 있도록 makefile을 생성하고 그것을 내 repo에 넣을 수 있습니까?

내가 중요한 것을 놓친 경우, 또는 GitHub에있는 모든 코드를 물어보십시오.

+1

쓰기 손으로 먼저 파일을 만들 수 있어야하는 것은 컴파일이 어떻게 작동하는지 이해하기 위해 배울 수있는 좋은 방법입니다. IDE/cmake로 빌드 할 때 문제를 디버깅 할 때 도움이 될 수 있습니다. 프로젝트가 커지면 CMake 나 IDE가 makefile의 종속성을 유지하면서 많은 작업을 절약 할 수 있습니다. CMake는 이전에 autotools가 가장 많이 사용되었지만 이들을 배울 수없는 크로스 플랫폼 코드에 대해 널리 사용됩니다. – Eelke

+0

가능한 복제본 : [정의되지 않은 참조/확인되지 않은 외부 기호 오류 란 무엇이며 어떻게 해결할 수 있습니까?] (https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- 심볼 오류 수정 방법) –

+0

[정의되지 않은 참조/확인되지 않은 외부 기호 오류 란 무엇이며 어떻게 수정합니까?] (https://stackoverflow.com/questions/12573816/) 정의되지 않은 참조 - 해결되지 않은 - 외부 기호 오류 및 방법 -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

나는 간단한 것을 놓친다는 것을 알았습니다. 고맙습니다! –

관련 문제