쉬운질문... gcc 에서 static라이브러리 설정은 어떻게 하나요?

declspec의 이미지

안녕하세요

VC++ 6.0 에서 프로젝트 옵션에 보시면
기본적으로 컴파일러가 추가해주는 lib 파일들이 있잔아요?(정적 라이브러리)

gcc 의 경우도 libc.a 같은 정적 라이브러리들을 컴파일러가
기본적으로 링크시켜주는거로 아는데요
기본적으로 링크해주는 라이브러리들의 목록을 어떻게하면 볼수있나요?
또한 컴파일시 어떠한 정적 라이브러리를 추가적으로 링크하게 하고싶을땐
어떻게 하나요??
(VC++6.0 은 프로젝트 메뉴에서 걍 추가로 써주면 되죠)

익명 사용자의 이미지

ar 명령어 알아보시고,
.o 컴파일하듯 하면 되고...
질문 내용으로 짐작하기에... .so 와 .a 의 차이점을 파악하셔야 될 듯 하네요.
정적 라이브러리는 a.out 속안에 들어가서 a.out 파일이 엄청나게 커집니다.(대신 의존성 문제 없음)

declspec의 이미지

감사합니다
만약 libmy.a 라는 파일이 있다면 /usr/lib 에 넣고
gcc -o output source.c -lmy
라고 하면 되는거군요?

ar 명령을 알아보니 결국 정적 라이브러리는
.o 파일들의 묶음일뿐 특별한 차이는 없는것 같네요

so 와 a 의 차이점은 간단하게는 알고있습니다
윈도우에서 dll 과 lib 파일의 차이처럼
동적라이브러리와 정적라이브러리인 것이죠?

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

익명 사용자의 이미지

default로 link 되는 라이브러리를 알고 싶으시면 gcc로 링크를 하실 때 --verbose 옵션을 주시면 됩니다. 몇몇 .o 파일이 user가 준 .o file에 덧붙고, -l 옵션이 추가됨을 볼 수 있는데 그게 링크되는 라이브러리/object module들인 것 같습니다. 그런데 질문하신 내용으로 보아, 이 목록들을 굳이 아실 필요가 있는지 잘 모르겠군요.

컴파일 시에 정적 라이브러리를 libtmp.a라는 정적 라이브러리를 추가하시고 싶다면, -ltmp -L라이브러리가_있는_경로 이렇게 해주시면 됩니다. 제 파일이 main.o foo.o bar.o라면, 그리고 library가 /home/myenemy/hidden에 들어있는 libtmp.a라면,

gcc -o program_name.x main.o foo.o bar.o -L/home/myenemy/hidden -ltmp

이런 식이 됩니다.

관습상 라이브러리는 lib으로 시작하고, .a 또는 .so 어쩌고로 끝납니다. 그 사이에 있는 토큰이 라이브러리의 이름이며 -l 옵션 뒤에 그 이름을 적어주시면 되죠. -L은 gcc가 어디서 그 이름의 라이브러리를 찾아야 하는지 지정해줍니다. 아마 gcc가 기본으로 library를 찾는 path가 열거된 설정 파일이 어딘가 있을 겁니다. gcc는 이 path들에 추가로 -L에 적힌 path를 뒤집니다.

그리고 ar은 static library를 만드는 데 사용할 수 있는 유틸리티입니다.

익명 사용자의 이미지

많은 도움 되었습니다
감사합니다~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.