C++/g++
정적 라이브러리 생성 및 링킹..
jdaemanv2
2024. 10. 15. 22:35
[1. 개요]
g++ -v --help 를 통해서, 모든 옵션을 확인 할 수 있다.
[2. 코드 구조]
- main.cpp
- calc\
- s1.cpp
- s2.cpp
- util.hpp
[3. 절차]
- calc 라이브러리를 빌드하도록 한다.
- 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 를 찾아서 링킹한다.