하나, 정적 라이브러리를 알고
- .a를 접미사로 사용하십시오. 일반적으로 Linux에서는 libxxx.a로 명명됩니다.
- 프로그램이 정적 라이브러리를 사용할 때 링커 (ld)는 전체 libxxx.a의 모든 함수를 실행 파일에 복사합니다.
2. 장점과 단점
장점 : 정적 라이브러리를 사용할 때 실행 파일로 컴파일 한 후 런타임시 라이브러리에 의존하지 않습니다.
단점 : 실행 파일이 크고 정적 라이브러리가 변경되었으므로 실행 파일을 다시 생성해야합니다.
셋째, 정적 라이브러리를 만들고 사용하는 방법
도구 : ar, 개체 파일 .o를 별도의 정적 라이브러리로 패키지화합니다.
Linux에서 정적 라이브러리를 만드는 단계 :
- 소스 코드 파일 (.c, .cpp) 편집
- gcc -c * .c를 통해 개체 파일 * .o 생성 또는 g ++ -c * .cpp 접기
- ar을 사용하여 개체 파일을 패키징하고 정적 라이브러리 생성
- 정적 라이브러리에 대한 헤더 파일 제공 (즉, 정적 라이브러리에서 제공하는 서비스 인터페이스와 같은 * .h 파일)
ar 명령의 사용 :
형식 : ar [-] {dmpqrtx} [abcfilNoPsSuvV] [membername] [count] 아카이브 파일 ...
매개 변수 :
명령 매개 변수
-d 라이브러리 파일에서 구성원 파일 삭제
-m 라이브러리 파일에서 구성원 파일의 순서를 변경합니다.
-p는 라이브러리 파일에있는 구성원 파일의 내용을 표시합니다.
-q 파일을 라이브러리 파일 끝에 추가합니다.
-r 라이브러리 파일에 파일 삽입
-t는 라이브러리 파일에 포함 된 파일을 표시합니다.
-x 라이브러리 파일에서 구성원 파일 제거
옵션 매개 변수
a <멤버 파일> 라이브러리 파일에 지정된 멤버 파일 뒤에 파일을 삽입합니다.
b <멤버 파일> 라이브러리 파일에 지정된 멤버 파일 앞에 파일을 삽입합니다.
c 라이브러리 파일을 만듭니다.
f 긴 파일 이름이 다른 시스템의 ar 명령과 호환되지 않는 것을 방지하기 위해이 매개 변수를 사용하여 라이브러리 파일에 넣을 긴 멤버 파일 이름을 잘라낼 수 있습니다.
i <멤버 파일> 라이브러리 파일에 지정된 멤버 파일 앞에 멤버를 삽입합니다.
o 라이브러리 파일에 파일 날짜를 유지합니다.
■ 객체 모드가 라이브러리 파일에 포함 된 경우이 매개 변수를 사용하여 저장할 파일의 기호 테이블을 만들 수 있습니다.
S는 기호 테이블을 생성하지 않습니다.
u 최신 날짜의 파일 만 라이브러리 파일에 삽입하십시오.
v 프로그램이 실행될 때 자세한 정보를 표시합니다.
V 버전 정보를 표시합니다.
네, 밤
test.h
int add(int a, int b);
test.cpp
#include "test.h"
int add(int a, int b)
{
return (a + b);
}
엮다:
[xy@xunye ar]$ g++ -c test.cpp
[xy@xunye ar]$ ls
test.cpp test.h test.o
정적 라이브러리를 만듭니다.
[xy@xunye ar]$ ar rcs libtest.a *.o
[xy@xunye ar]$ ls
libtest.a test.cpp test.h test.o
정적 라이브러리 사용 :
main.cpp
#include "test.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
cout << add(3, 2) << endl;
return 0;
}
실행 파일을 만듭니다.
[xy@xunye use_lib]$ ls
libtest.a main.cpp test.h
[xy@xunye use_lib]$ g++ -o main main.cpp -L. -ltest
[xy@xunye use_lib]$ ls
libtest.a main main.cpp test.h
[xy@xunye use_lib]$ ./main
5
설명 : -L은 g ++가 정적 라이브러리를 검색 할 경로를 지정합니다. "."는 현재 경로에서 검색 함을 의미합니다.
-l은 특정 라이브러리를 지정합니다. 그 중에서 lib 및 .a는 표시하지 않고 작성할 수 있습니다.
[Note] 라이브러리에서 gcc 또는 g ++를 검색하는 순서 : 먼저 동적 라이브러리 .so를 찾고, 찾을 수 없으면 정적 라이브러리 .a를 찾습니다.