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

anaud2의 이미지

안녕하세요

현재 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의 이미지

김정균의 이미지

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

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

세이군의 이미지

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

gcc -o test test.c libcipher.a
김정균의 이미지

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

Necromancer의 이미지

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

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

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

myjimi의 이미지

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

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

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

안녕하세요.

anaud2의 이미지

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.