1. 생성방법
- 정적 라이브러리 생성
g++ -c add.cc -o add.o
g++ -c del.cc -o del.o
ar rcs libapi.a del.o add.o
g++ -static main.cc -o static main -L./ -lapi -l./
./static main
- 동적 라이브러리 생성
g++ -c add.cc -o add.o
g++ -c del.cc -o del.o
g++ -shared -fPIC -o libapi.so del.o add.o
g++ main.cc -o dynamic main -L./ -lapi -l./
export LD LIBRARY PATH=$LD LIBRARY PATH:/home/mark/interview/ccplus/lib
./dynamic main
2. 링크방법
-
정적 링크는
정적 라이브러리를 대상 파일로 컴파일합니다. -
동적 링크는
라이브러리를 대상 파일로 컴파일하지 않습니다.
실행 코드는 프로그램이 실행될 때 로드됩니다: 주소 독립적 코드 기술-fPIC, 로드 중 재배치는
구문 검사만 수행합니다.
3. 우주점령
정적 라이브러리에는 여러 복사본(메모리 및 디스크)이 있습니다.
동적 라이브러리의 복사본은 하나만 있습니다.
4. 사용방법
정적 라이브러리가 있는 프로그램이 직접 실행됩니다.
동적 라이브러리가 있는 프로그램은 동적으로 로드됩니다. 참고: 프로그램 환경은 동적 라이브러리 검색 경로 LD LIBRARY PATH를 지정해야 합니다.
5. 실행 속도
정적 라이브러리는 빠르고 동적 라이브러리는 느립니다.
6. 라이브러리 파일 변경
인터페이스 변경: 모두 다시 컴파일해야 함
인터페이스 구현 변경: 정적 라이브러리는 다시 컴파일해야 하며 동적 라이브러리만 다시 컴파일하면 됩니다.
Lingsheng Academy 프로젝트 수업을 추천합니다. 개인적으로 선생님께서 잘 가르쳐주신 것 같습니다. 공유하고 싶습니다:
Lingsheng Platinum Learning Card(인프라/고성능 스토리지/golang 클라우드 네이티브/오디오 및 비디오/Linux 커널 포함)
https://xxetb.xet .tech/s/VsFMs