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

anaud2의 이미지
2321
points
0
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 에서 함수들이 링크가 안된다~란메세지를 나오는거 같아요

정적라이브러리가 다른 라이브러리를 참조한다면 이건 어떻게 만들어야 하나요? 도와주세요~

cinsk의 이미지
11955
points

-lxxx 옵션의 순서를

0
points

-lxxx 옵션의 순서를 바꿔 보세요.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

김정균의 이미지
9736
points

.so 가 없으면

0
points

.so 가 없으면 마지막에 -static 옵션을 줘야 할 수도 있습니다.

gcc -o test test.c -L/usr/local/lib -L./ -lcipher -lcrypto -static

세이군의 이미지
27586
points

-l 옵션은

1
point

-l 옵션은 공유라이브러리를 지정할 때 쓰는 옵션 아닌가요?
정적 라이브러리는 옵션없이 쓰는 걸로 알고 있는데.. 아래처럼요.

gcc -o test test.c libcipher.a

김정균의 이미지
9736
points

-static 옵션을 주면

0
points

-static 옵션을 주면 static library 로 링크를 할 겁니다. (libtool 사용할 때와 cc 를 직접 사용할 경우가 갑자기 헷갈리는 군요 ^^) -static 을 주지 않았을 경우 -l 은 .a 가 있더라도 찾지 않을 겁니다.

Necromancer의 이미지
14761
points

-l은 공유든 아니든

0
points

-l은 공유든 아니든 상관없습니다.

-lX11을 지정하면 libX11.??? 라는 이름 가진 파일을 찾죠. 뒤에 a가 붙든 아니든.

Written By the Black Knight of Destruction

static library 에서 다른

0
points

static library 에서 다른 static library 를 참조한다면 링크 옵션을 줄때 참조 되는 library 를 뒤로 주면 되는 걸로 알고 있습니다.

cipher 에서 crypto 를 참조하고 있으므로 cipher -> crypto 순으로 명시해주면 됩니다.

# gcc test.c -o test -L/usr/local/lib -L. -lcipher -lcrypto

anaud2의 이미지
2321
points

답변감사합니다.

0
points

많은분들의 답변 감사합니다. 덕분에 해결이 됐습니다. -l의 순서를 바꿔주니까 되네요
많은분들의 답변 다시한번 감사합니다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.