[질문] 라이브러리 링크에 대한 질문입니다..
글쓴이: yhjj777 / 작성시간: 목, 2003/06/12 - 9:34오후
분명히 컴파일이 제대로 된 라이브러리인데도 링크가 제대로 되질 않습니다.
undefined reference to xx 이러면서요.
Makefile에도 이상이 없어 한참을 고민하다가 Makefile에서 라이브러리와 오브젝트의 순서를 바꿔주니 에러 메세지는 줄긴했지만 문제가 해결이 되진않네요.. 단방향으로 호출할 경우에는 순서를 바꿔주는걸로 해결이 되지만.. 양쪽으로 서로 호출하는 경우에는 -.-;
전체 클래스의 수가 약 삼백개정도 되는데,,.. 클래스가 많을 경우에 컴파일에 문제가 생기는 경우가 있을까요? 혹시 저와 같은 비슷한 상황을 경험해보신 분이 계시다면 답변 좀 해주세요. freebsd에서 g++ 2.95.4를 사용합니다.
Forums:
부분부분 archive를 만들어서 link하면 되지 않을까요?
부분부분 archive를 만들어서 link하면 되지 않을까요?
---
http://coolengineer.com
패키지별로 나눠서 아카이브 만들었는데도 이러네요.. -.-;
패키지별로 나눠서 아카이브 만들었는데도 이러네요.. -.-;
에러메시지를 다 올려주시죠?다른 문제가 있어보입니다만... :)
에러메시지를 다 올려주시죠?
다른 문제가 있어보입니다만... :)
---
http://coolengineer.com
[code:1]../../lib/libmap.a(Position.
만약 상호 참조하는 문제때문에 생기는 것이라면 일단..object나
만약 상호 참조하는 문제때문에 생기는 것이라면 일단..
object나 archive 들이 아래 두 곳이 있다고 가정하고..
nm -A -C /home/edgy/ffo/map/objs/*.o /home/edgy/ffo/lib/lib*.a
를 실행했을때 모두 "U" 아닌 "T" 로 해당하는 곳이 한 개가 나와야합니다.
nm -A -C /home/edgy/ffo/map/objs/*.o /home/edgy/ffo/lib/lib*.a | grep MapController
해서 MapController::GetCount(void) 에 해당하는 "T" 가 발견되나요?
nm -A -C /home/edgy/ffo/map/objs/*.o /home/edgy/ffo/lib/lib*.a | grep Planet
해서 Planet::GetID(void)에 해당하는 "T" 가 발견되나요?
추가적으로..
static 변수가 선언된후에 정의가 안되어 있는것 같습니다.
위처럼 해결하시고..
이건....아마도
virtual function은 사용하지 않아도 모두 만들어줘야 하는데, 없다는 것네요.
SectionProxy::GetPos(void) 함수가 존재하나요?
---
http://coolengineer.com
이 문제때문에 며칠을 고생할거같았는데 덕분에 쉽게 문제를 해결했습니다.
이 문제때문에 며칠을 고생할거같았는데 덕분에 쉽게 문제를 해결했습니다.
정말 감사합니다 :D
다행이군요..!
다행이군요..!
---
http://coolengineer.com
[quote="yhjj777"]이 문제때문에 며칠을 고생할거같았는데 덕분
근데 문제가 뭐였나요? pynoos 님께서 몇가지 말씀을 해 주셨는데,,
virtual function의 문제였나요? ㅡ.ㅡ?
덕분에 무인승차좀.. ㅡ,.ㅡ
1. static 변수 초기화를 안함.2. header 파일에만 함수
1. static 변수 초기화를 안함.
2. header 파일에만 함수를 선언하구 구현을 안함.
3. Makefile에서의 라이브러리 링크 순서
1,2번같은 경우에는 컴파일이 제대로 되서 이 문제일거라고는
생각도 못했는데.. -.-; 3번같은 경우는... 링크한 라이브러리의
수가 많아지니,, 순서까지 신경을 써줘야되더군요..
3번은 경우
안녕하세요.
여담입니다.
3번의 경우에는 저도 당해보았습니다. HP10 에서 경험한것인데 정말 난감하더군요. 링킹 순서가 존재하리라고는 상상을 못해보았거든요. 더불어서 HP10에서는 너무도 많은 제약이 존재해서 조금 힘들게 해보았던 경험이 있습니다.
댓글 달기