링커마다 차이가 있을수는 있는데, GNU gcc를 사용한다면 분명 문제가 생길때가 있다.
즉, gcc(실제로는 ld)가 링크작업을 수행하면서 '라이브러리 목록'을 앞에서 뒤로 한번만 검색하기때문에 생기는 문제.
그런 경우를 위해서 ld 옵션에는
-Wl,--start-group {라이브러리 목록} -Wl,--end-group
이 마련되어 있다.(-Wl 대신 -Xlinker를 사용해도 된다)
 즉, 라이브러리 목록은 한번 더 검색해준다는 얘기.

그런데, 자동화 빌드 도구들(automake, autoconf, 등등)을 사용할때는 적용하기가 어렵다.
Makefile.am 작성할때 ld 옵션을 넣고 싶긴한데, 아무리 매뉴얼을 뒤져봐도 그런 옵션들을 넣을 방법이 안나온다.
즉, GNU의 그런 도구들은 '위치 의존적인 옵션'들에 대해서는 자동화도구에서 '이식성'문제로 지원하질 않는다.

비록 편법이긴하지만, 간단한 해결책은 "그냥 목록을 두번 작성하는 것"이다.
USER_LIBS=-lcommon -lutil -lmisc

였다면
USER_LIBS=-lcommon -lutil -lmisc -lcommon -lutil -lmisc

라고 두번쓰는것.

 
Posted by Jason Ryu
,