본문 바로가기

C++/g++

정적 라이브러리 생성 및 링킹..

[1. 개요]

g++ -v --help 를 통해서, 모든 옵션을 확인 할 수 있다.


[2. 코드 구조]

  • main.cpp
  • calc\
    • s1.cpp
    • s2.cpp
    • util.hpp

[3. 절차]

  1. calc 라이브러리를 빌드하도록 한다.
  2. main.cpp 컴파일 시 calc 라이브러리를 링킹 하도록 한다.

A. 라이브러리 빌드

  • cd calc
  • g++ -c s1.cpp s2.cpp
    # 컴파일 및 어셈블까지 하고, 링킹은 하지 않는다.
    # *.cpp 로 해도 된다.
  • ar rcus libcalc.a *.o
    # 각 object 파일을 명시해도 된다. (s1.o  s2.o ...) 
    # 현재 디렉터리에 있는 모든 object (.o) 파일을 하나의 파일로 묶어준다.
    # 일반적으로, .a 파일은 static 라이브러리 파일을 의미한다.
    # 일반적으로 ,lib<>.a 형태로 만들도록 한다.
    # 최소 r 옵션은 있어야 한다.

B. main.cpp 컴파일 시 라이브러리 링킹하기

  • cd ..
  • g++ main.cpp calc\libcalc.a
  • 혹은
  • g++ main.cpp -Bcalc -lcalc
  • 혹은
  • g++ main.cpp -L"calc" -lcalc

링킹 할 라이브러리의 위치를 알고 있다면, 컴파일러에 전체 경로를 넘길 수 있다.

  • 좋은 방법은 아닌 듯...
  • 단순 한 프로젝트면 ok.

-B 옵션은

  • 컴파일러가 라이브러리를 찾을 디렉터리를 명시한다.
  • -L 옵션과 같은 역할?

-l 은 링킹할 라이브러리 이름을 명시한다.

  • calc 이면, 컴파일러가 명시한 디렉터리에서 libcalc.a 를 찾아서 링킹한다.

 

'C++ > g++' 카테고리의 다른 글

정적 라이브러리 빌드  (0) 2023.07.05
컴파일 링커 옵션  (0) 2023.04.17