프로그래밍 언어/C/C++

unresolved symbol 에 관하여

소혼 2010. 1. 27. 00:27
반응형
컴파일(정확히는 링크)을 할 때 아래와 같은 에러를 종종 보곤 한다.
unresolved symbol이라는 에러는 말 그대로 해당 심볼명을 찾을 수 없다는 에러이다.

이런 에러가 났을 때, 우리가 해야 할 일은

[ 내가 만든 함수인 경우 ]
   1. unresolved symbol이 뜬 곳에서 함수명, 인자의 타입, 개수, 반환값등을 확인한다.
   2. 해당 함수를 포함한 파일이 컴파일 되는지 확인한다.
      매크로등에 의해 컴파일에 포함되지 않을 수도 있기 때문이다.
      쉽게 확인하는 방법의 하나는 해당 함수에 #error를 넣고 컴파일해보는 것이다.
      컴파일 에러가 아니라, unresolved symbol이 또 뜬다면, 그 함수는 컴파일에 포함되지 않은것이다.
  3. C함수인지 C++함수인지 확인한다.
      C++로 컴파일 할 때, C함수(C로 컴파일되는 파일에 있는 함수)를 처리하려면 헤더파일에는 extern "C" { }안에 함수가 선언되어 있어야 한다.
      만약 헤더파일에서 이러한 처리가 제대로 안되어 있다면 C++은 해당 함수의 이름을 C++형태로 추적하려 한다.

[ 남이 만든 함수인 경우(라이브러리에서 참조하는 경우) ]
   4. 3번과 같이 헤더파일에 제대로 선언되어 있는지 확인한다.
   5. 라이브러리 파일안에 해당 함수가 있는지 파일 내부를 검색한다.(grep같은 것을 이용하여)
   6. 컴파일 할 때, 해당 라이브러리가 포함되는지 확인한다.
       리눅스의 경우 -L의 라이브러리의 경로가 맞게 포함되어 있는지, -l로 해당 라이브러리가 첨부되어 있는지 확인해야 한다.
반응형

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
[Python]파일명 바꾸기  (0) 2009.09.02
AspectC++  (0) 2009.08.31