본문 바로가기

Linux

[Makefile] undefined reference to ...

이제 makefile 어느정도는 감 잡았다고 생각했는데
매번 할때마다 고생을 하게된다.

그런거 보면 아직 한참 멀었다는.. =_=

그간 경험으로 비추어 볼때 undefined reference 에러의 원인은 다음과 같다.
1) VPATH가 빠진 경우.
2) 오브젝트 파일(또는 라이브러리)에 symbol이 undefine 되어 있는 경우. (objdump로 확인 가능)
3) 빌드할 때 오브젝트 파일(또는 라이브러리)을 LINK하지 않은 경우.

이번에 생긴 문제는 분명 makefile에서 링크할 헤더파일 위치 Include해주고
함수 정의가 되어있는 c파일(또는 라이브러리) 위치도 지정해줬는데 undefined reference 에러가 발생한다는 것.

kldp에 검색해보면 빌드할때 object 순서와 연관이 있다고 하는데....
(맨뒤에 링크한 오브젝트부터 링크된다?)

선포스팅 후테스팅 -,-
결과는 잠시후에...

To be continued.

--->
문제가 해결되긴 했는데 문제 원인은 다른 곳에 있었다.
build 파일끝에 테스트 코드가 무조건 빌드되도록 누군가 추가해놓았는데
이 테스트 코드를 빌드하는 Makefile에는 사용하고자 하는 옵션에 필요한 라이브러리가 링크되어 있지 않았던 것.. -_-


링크 에러임을 알았을 때 빨리 MAKE 부분을 확인했어야 함.
로그를 찬찬히 분석해봤다면 금방 해결되는 문제였음.
MAKE 위치를 바로 찾을 수 있었기 때문에.



어쨋든 삽질중에 괜찮은 팁 하나를 얻었음.

 

gcc -o exefile -Xlinker --start-group libmod1.a libmod2.a libmod3.a -Xlinker --end-group

-Xlinker는 뒤에 옵션을 링커(ld)에 넘기라는 옵션입니다.
링커옵션인 --start-group 와 --end-group는 이런 역할을 한답니다.
"The specified 
archives are searched repeatedly until no new undefined references are created."