undefined reference[C++, ROS]
10 Oct 2021 | ROS
오늘은 undefined reference to 에러에 대해 알아보겠습니다. 결론적으로 이 에러는 컴파일 시, 헤더 파일에 선언은 되어있으나, 소스 파일에 정의가 안되어 있다는 의미입니다. 함수는 보통 헤더 파일에 선언이 되고, 소스 파일에 정의를 하여서 많이 사용합니다
즉, 오타가 많더라구요. 그 외의 경우는 헤더파일이 빠져있는 경우도 많았습니다.
한 달동안 C 코드를 안하다 보니, 코딩을하는데 많은 부분을 까먹었다.
특히, 코딩중 undefined reference가 많이 나왔는데 주로 일어나는 이유가
- header 파일을 cpp에 지정 하지 않았다.
- CMAKE에 find package, target library, execute, add library
- package.xml
- 불러오는 class에 Constructor(Initialization)만 하고 destructor를 안해주면, 위와 같은 undefined reference문제가 나온다.
- call 하는 실제 함수가 없다
- cpp파일에서 c파일에서 구현하는 함수를 call 할때 발생(해결 방법 https://simmmmmk.tistory.com/19)
- target_link_libraries 항목을 찾아서 해당 라이브러리 이름을 추가해주면 되겠습니다
즉 확인
-
메소드를 구현했는가? .h에 선언만 해 놓고 .cpp에 구현은 아직 안 한게 아닌가?
-
.cpp에 scope를 잘 지정했는가? void ClassName::method(){}이렇게 namespace를 잘 지정해줬는가?
-
- 생성자 구현을 헤더 파일안에서 inline으로 해주거나, 2. g++로 컴파일할때 링크를 건드리거나.
- 이에 Cmake에서는 add_library를 target_link_libraries에다 연걸 마지막 add_executable, 실행 파일에다가 링크 지정을 해줘야 한다. 그래야 undefined error를 피할 수 있다.
오늘은 undefined reference to 에러에 대해 알아보겠습니다. 결론적으로 이 에러는 컴파일 시, 헤더 파일에 선언은 되어있으나, 소스 파일에 정의가 안되어 있다는 의미입니다. 함수는 보통 헤더 파일에 선언이 되고, 소스 파일에 정의를 하여서 많이 사용합니다
즉, 오타가 많더라구요. 그 외의 경우는 헤더파일이 빠져있는 경우도 많았습니다.
한 달동안 C 코드를 안하다 보니, 코딩을하는데 많은 부분을 까먹었다.
특히, 코딩중 undefined reference가 많이 나왔는데 주로 일어나는 이유가
- header 파일을 cpp에 지정 하지 않았다.
- CMAKE에 find package, target library, execute, add library
- package.xml
- 불러오는 class에 Constructor(Initialization)만 하고 destructor를 안해주면, 위와 같은 undefined reference문제가 나온다.
- call 하는 실제 함수가 없다
- cpp파일에서 c파일에서 구현하는 함수를 call 할때 발생(해결 방법 https://simmmmmk.tistory.com/19)
- target_link_libraries 항목을 찾아서 해당 라이브러리 이름을 추가해주면 되겠습니다
즉 확인
-
메소드를 구현했는가? .h에 선언만 해 놓고 .cpp에 구현은 아직 안 한게 아닌가?
-
.cpp에 scope를 잘 지정했는가? void ClassName::method(){}이렇게 namespace를 잘 지정해줬는가?
-
- 생성자 구현을 헤더 파일안에서 inline으로 해주거나, 2. g++로 컴파일할때 링크를 건드리거나.
- 이에 Cmake에서는 add_library를 target_link_libraries에다 연걸 마지막 add_executable, 실행 파일에다가 링크 지정을 해줘야 한다. 그래야 undefined error를 피할 수 있다.
Comments