[완료]리눅스 정적 라이브러리를 만들고 링크 하는법에 대한 질문입니다.

2321
points
points
안녕하세요
현재 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 에서 함수들이 링크가 안된다~란메세지를 나오는거 같아요
정적라이브러리가 다른 라이브러리를 참조한다면 이건 어떻게 만들어야 하나요? 도와주세요~

points
-lxxx 옵션의 순서를
-lxxx 옵션의 순서를 바꿔 보세요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
points
.so 가 없으면
.so 가 없으면 마지막에 -static 옵션을 줘야 할 수도 있습니다.
gcc -o test test.c -L/usr/local/lib -L./ -lcipher -lcrypto -staticpoints
-l 옵션은
-l 옵션은 공유라이브러리를 지정할 때 쓰는 옵션 아닌가요?
정적 라이브러리는 옵션없이 쓰는 걸로 알고 있는데.. 아래처럼요.
gcc -o test test.c libcipher.apoints
-static 옵션을 주면
-static 옵션을 주면 static library 로 링크를 할 겁니다. (libtool 사용할 때와 cc 를 직접 사용할 경우가 갑자기 헷갈리는 군요 ^^) -static 을 주지 않았을 경우 -l 은 .a 가 있더라도 찾지 않을 겁니다.
points
-l은 공유든 아니든
-l은 공유든 아니든 상관없습니다.
-lX11을 지정하면 libX11.??? 라는 이름 가진 파일을 찾죠. 뒤에 a가 붙든 아니든.
Written By the Black Knight of Destruction
points
static library 에서 다른
static library 에서 다른 static library 를 참조한다면 링크 옵션을 줄때 참조 되는 library 를 뒤로 주면 되는 걸로 알고 있습니다.
cipher 에서 crypto 를 참조하고 있으므로 cipher -> crypto 순으로 명시해주면 됩니다.
# gcc test.c -o test -L/usr/local/lib -L. -lcipher -lcrypto
points
답변감사합니다.
많은분들의 답변 감사합니다. 덕분에 해결이 됐습니다. -l의 순서를 바꿔주니까 되네요
많은분들의 답변 다시한번 감사합니다.