[SOLVED] Automake 로 link 할 때, undefined reference error
글쓴이: owcred601 / 작성시간: 화, 2016/09/06 - 3:42오후
안녕하세요.
ARM 보드를 사용하고 있고, Makefile.am, configure.ac 를 사용해서 Static library link 도중에
[ error: undefined reference to "함수명" ]
에러가 발생합니다.
LOCAL_LINK_STATIC_LIBS := \ -I$(libdir)/libmicrohttpd.a\ -I$(libdir)/libcryptopp.a myprog_LDFLAGS = -lstdc++ -g -ldl -lpthread $(LOCAL_LINK_STATIC_LIBS)
위와 같은 방법으로 링크를 시도했는데, 혹시 잘못 작성한 부분이 있는걸까요?
라이브러리 순서도 변경해보고, 여러 방법으로 시도했지만 잘 해결되지 않습니다.
nm 명령어로 .a 파일을 확인해보면 함수 명이 정확하게 들어가 있습니다.
Forums:
정적 library를 직접 풀패스로 직접 링크 하고
gcc를 사용하고 계신 것이라면(이는 다른 compiler에서는 보증하지 못한다는 의미입니다.), 정적 library를 직접 풀패스로 직접 링크 하고 싶다면 옵션 없이 지정해 주시면 됩니다.
또는, 만약 해당 경로에 static library만 있다면(예를 들어, m.a 와 m.so 가 같이 있지 않다면..) 아래와 같이 작성할 수 있습니다.
만약 static library와 shared library가 같이 있다면, 아래와 같이 해 주시면 됩니다.
정말 감사합니다. 가장 마지막 해결 방법이 조금 궁금합니다.
-Wl,-Bstatic 이랑 -Wl,-Bdynamic 에서 이 옵션은 정적 라이브러리와 동적 라이브러리를 사이에 넣으면 되나요? 마치 -Xlinker -start-group -end-group 처럼요?? 몇 번 검색해서 나오는 방법으로 사용해보았는데, 문법을 잘 모르겠네요.
알려주신 방법대로 진행해보겠습니다.^^ 경로에 static library 만 있으면 -L -l 도 가능하다는 것은 처음 알았습니다. 많이 배워갑니다. 정말 감사합니다.
-- UPDATE --
감사합니다. 말씀대로 해보니 에러는 바뀝니다!^^ 해당 경로에 그 같은 파일이 없다고 출력되네요.
혹시 Makefile.am 이나 configure.ac 에서 echo로 경로 찍어볼 수 있는 방법은 없을까요?
-Wl,-Bstatic 은 linker에게 이 옵션
-Wl,-Bstatic 은 linker에게 이 옵션 이후 부터는 -l 로 지정된 library를 static library로 찾으라는 의미입니다. 즉
와 같이 link할 경우, lib1과 lib3의 경우에는 가능하면 dynamic link 할 것이고, lib2는 static link하게 됩니다. 마지막에 "-Wl,-Bdynanic"은 앞에서 "-Wl,-Bstatic" 으로 static link를 하도록 변경했기 때문에, 다시 dymamic library를 link 하도록 원상 복구 시켜 주는 것입니다. 위의 예에서 lib2 뒤에 더이상 link할 library가 없다면 굳이"-Wl,-Bdynamic"을 지정할 필요는 없습니다. 위의 예에서는 lib2를 static library로 link 한 후에 lib3를 dynamic link 하기 위하여 "-Wl,-Bdynanic" 옵션을 준 것입니다.
그리고, 에러 스트링은 항상 있는 그대로 적어 주시는 것이 도움이 됩니다. 에러 메시지가 바뀌었다고만 하면 왜 그런지 도움을 줄 방법이 없습니다.
친절한 답변 정말 감사합니다.
추석은 잘 보내셨나요?ㅎㅎ
KLDP는 정말 회사 초년생인 제게 큰 힘이 되네요..
덕분에 많이 배워갑니다. 정말로 감사합니다. _(_ _)_
댓글 달기