undefined reference to xxxx 해결 방법
undefined reference to xxx는 해당 함수를 다음과 같은 경우에 나올 수 있다.
1. 정의한 헤더파일을 include 하지 않았거나
2. 해당 라이브러리를 링크하지 않았거나
3, 각 라이브러리의 순서가 다를 경우
1, 2번의 경우는 include 시켜주거나 -l을 사용해서 라이브러리를 링크 시켜주면 된다.
3번의 경우에 만약 aaa라는 메소드가 liba.a에 있고 bbb라는 메소드가 libb.a에 있을 경웨 aaa가 bbb를 참조하는경우에는 -la -lb의 순서로 링크되어야 한다. 그런데 서로가 참조할 경우에는 순서에 문제가 생기므로 undefined reference to 의 문제가 생길 수 있다. 이럴 때에는 다음과 같이 재귀해서 호출하는 컴파일 명령어를 사용한다.
-Xlinker --start-group -la -lb --end-group
그리고 위 명령어는 source.c 파일을 바로 실행파일을 만들 때는 실행되지 않으므로 source.o로 미리 생성한 후에 실행파일을 만들 때 적용시켜야 된다.
참고 : ZemyBlue 사는 얘기 http://www.zemy.net/tc/zemyblue/113
예시
LIBDIR = -L$(HOME)/lib -L/usr/lib/mysql -lmysqlclient -lm
INCLUDE = -I$(HOME)/include
LIBLIST = $(HOME)/lib/libSSMP_AE.a $(HOME)/lib/libSSMP_ECC-Enc.a
$(CC) -o $(EXE) $(OBJ) $(INCLUDE) $(LIBDIR) -Xlinker --start-group $(LIBLIST) --end-group

Comments List