[완료] 라이브러리 생성시 의존성 채크방법
글쓴이: Nadia85 / 작성시간: 월, 2009/05/25 - 2:08오전
다음과 같은 두 파일로 부터 라이브러리를 만들려고 합니다.
test1.c
int func1() { func2(); }
test2.c
int func2() { func3() }
위의 두 코드를
gcc -c test1.c
gcc -c test2.c
로 오브젝트로 만들고
gcc -shared -O libtest.so test1.0 test2.o
를 사용해서 라이브러리를 만들었습니다.
그런데 test1,2 어디에도 func3() 함수가 정의 되어 있지 않은데. 라이브러리가 만들어 지네요.... 제가 보기엔 라이브러리가 만들어 지지 않아야 한다고 보는데요... 컴파일시 (-ㅣ옵션으로 추가 라이브러리를 써준 것도 아니고......)
실제로 실행 파일(main 함수가 있는 파일을 링크 할때)을 만들때 fun3()가 없다고 에러가 나긴 하는데, 라이브러리를 만들때 부터 에러가 나던지, 최소한 경고라도 받을 수 있는 방법이 없을까요?
Forums:
gcc 옵션입니다.
gcc -Wall 옵션 주면 나옵니다. (implicit declataion of function 'func3')
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
-Wall 옵션 줘도 header
-Wall 옵션 줘도 header 파일에 func3 가 있으면 경고 메시지는 나오지 않습니다.
즉 libtest.h에 func1 func2 func3가 다 있고 실수로 fund3를 구현하지 않고 라이브러리를 만들었을 경우를 말합니다.
모르겠네요 @_@
컴파일시 어딘가의 obj 가 링크될 것으로 예상하기 때문에 컴파일 명령 자체를 체크하지 않는 이상 해당 function 이 없어도 라이브러리는 항상 만들어질 수 있을 것 같습니다. 확인하려면 보통 가상 main 함수를 만들어서 실행파일로 컴파일을 시켜보는 방법을 쓰는데, 바로 라이브러리로 컴파일하면서 확인은 어려울 것 같습니다.
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
$ nm lib_something | grep -w
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답변 정말 감사
답변 정말 감사 드립니다.
그리고 염치 없지만 하나만 더 질문 드릴께요......
그렇다면 func3()를 정의한 libtest3.so 라는 공유 라이브러리를 만들었습니다.
그리고
gcc -shared -O libtest.so test1.0 test2.o -L. -ltest3 를 사용해서 libtest.so를 다시 만들었습니다.
이렇게 하면 실행 파일을 만들때 ld가 libtest.so를 링크할 때 libtest3.so도 같이 링크 함을 확인 하였습니다. (실행 파일을 만들때 -ltest -ltest3를 함께 주지 않고 -ltest만 주어도 -ltest3를 같이 링크 하더군요 :) )
그런데 안타까운 점은 말씀하신 방법을 사용해서 libtest.so 를 살펴보면 똑같이 func3가 정의 되지 않은 심볼로 나옵니다. 실제 라이브러리에는 libtest3.so 를 링크해서 func3를 찾을 수 있는 방법이 있음에두 불구하고 이런 정보는 얻을 수가 없습니다.
이런경우에는 가짜 main을 만들어서 확인해 보는 방법 이외에는 없을까요?
(제가 알기론 라이브러리를 링크할때도 똑같은 링커가 사용되는 걸로 아는데 실행 파일을 만들땐 그런걸 다 검사해 주는데 라이브러리를 만들대는 그렇지 않아서요......)
shared library 또는
shared library 또는 executable인 경우, ldd(1) 명령으로 의존성을 확인할 수 있습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기