[완료]리눅스 정적 라이브러리를 만들고 링크 하는법에 대한 질문입니다.
글쓴이: anaud2 / 작성시간: 수, 2008/06/11 - 10:07오후
안녕하세요
현재 cipher.c 란 함수를 제가 만들었습니다. 이파일의 함수는 openssl의 libcrypto.a 라이브러리를 참조해서 사용하고 있습니다.
cipher.c란 파일을 정적 라이브러리로 만들고 싶어서
gcc -c cipher.c [cipher.o생성]
ar -r libcipher.a cipher.o [libciper.a 생성]
이렇게 했습니다. 라이브러리가 만들어진거 같았습니다.
test.c란 파일을 만들어서 libcipher.a에 함수를 불러다 사용을 합니다.컴파일과정이
gcc -o test test.c -L/usr/local/lib -lcrypto -L./ -lcipher
이렇게라고 생각을 했는데 해보니 결과가 링크에러가 계속나고 있습니다. libcipher.a 에서 함수들이 링크가 안된다~란메세지를 나오는거 같아요
정적라이브러리가 다른 라이브러리를 참조한다면 이건 어떻게 만들어야 하나요? 도와주세요~
Forums:
-lxxx 옵션의 순서를
-lxxx 옵션의 순서를 바꿔 보세요.
--
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/
.so 가 없으면
.so 가 없으면 마지막에 -static 옵션을 줘야 할 수도 있습니다.
-l 옵션은
-l 옵션은 공유라이브러리를 지정할 때 쓰는 옵션 아닌가요?
정적 라이브러리는 옵션없이 쓰는 걸로 알고 있는데.. 아래처럼요.
-static 옵션을 주면
-static 옵션을 주면 static library 로 링크를 할 겁니다. (libtool 사용할 때와 cc 를 직접 사용할 경우가 갑자기 헷갈리는 군요 ^^) -static 을 주지 않았을 경우 -l 은 .a 가 있더라도 찾지 않을 겁니다.
-l은 공유든 아니든
-l은 공유든 아니든 상관없습니다.
-lX11을 지정하면 libX11.??? 라는 이름 가진 파일을 찾죠. 뒤에 a가 붙든 아니든.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
static library 에서 다른
static library 에서 다른 static library 를 참조한다면 링크 옵션을 줄때 참조 되는 library 를 뒤로 주면 되는 걸로 알고 있습니다.
cipher 에서 crypto 를 참조하고 있으므로 cipher -> crypto 순으로 명시해주면 됩니다.
# gcc test.c -o test -L/usr/local/lib -L. -lcipher -lcrypto
안녕하세요.
답변감사합니다.
많은분들의 답변 감사합니다. 덕분에 해결이 됐습니다. -l의 순서를 바꿔주니까 되네요
많은분들의 답변 다시한번 감사합니다.
댓글 달기