Linux 에서 g++정적 라 이브 러 리 와 동적 라 이브 러 리 를 컴 파일 하고 사용 하 는 방법

windows 환경 에서 저 희 는 보통 IDE,예 를 들 어 VS 프로젝트 에서 C+프로젝트 를 개발 합 니 다.정적 라 이브 러 리(*.lib)와 동적 라 이브 러 리(*.dll)를 생 성하 고 사용 하 는 것 에 대해 익숙 할 수 있 지만 Liux 환경 에서 다른 모델 입 니 다.해당 하 는 정적 라 이브 러 리(*.a)와 동적 라 이브 러 리(*.so)의 생 성과 사용 방식 은 다 릅 니 다.처음에는 적응 이 안 될 수도 있 지만 많이 쓰 면 익숙해 질 거 예요.왜냐하면 절차 상 VS 아래 설정 이 그렇게 번 거 롭 지 않 기 때 문 이에 요.
다음은 Liux 에서 정적 라 이브 러 리 와 동적 라 이브 러 리 를 생 성하 고 사용 하 는 방법 을 요약 합 니 다.(C+프로젝트 이기 때문에 컴 파일 러 가 사용 하 는 g+이지 만 gcc 의 사용 과 통 합 됩 니 다)
우선 준비 작업 입 니 다.라 이브 러 리 파일 로 봉 인 된 함수 의 헤더 파일 과 원본 파일 을 작성 하 십시오.다음 과 같 습 니 다.

//myAPI.h 
int ADD(int a, int b); 
int MINUS(int a, int b); 

//myAPI.cpp 
#include "myAPI.h" 
 
int ADD(int a, int b){ 
  return a + b; 
} 
 
int MINUS(int a, int b){ 
  return a - b; 
} 
다음은 테스트 용 주 함수 원본 파일 을 준비 합 니 다:

//main.cpp 
#include "myAPI.h" 
#include <iostream> 
 
int main(){ 
  std::cout << "1 + 1 = " << ADD(1, 1) << std::endl; 
  std::cout << "1 - 1 = " << MINUS(1, 1) << std::endl; 
  return 0; 
} 
마지막 으로 my API.cpp 파일 을 컴 파일 하여 my API.o 대상 파일 을 만 듭 니 다.

g++ -c myAPI.cpp 
1.정적 라 이브 러 리 생 성 및 사용
Linux 에서 정적 라 이브 러 리 를 생 성 하 는 명령 ar 로 my API.o 파일 을 처리 하여 정적 라 이브 러 리 파일 을 생 성 합 니 다.생 성 된 라 이브 러 리 파일 은 규범 에 따라 야 하고 Liux 하 라 이브 러 리 파일 에"lib"접 두 사 를 붙 여야 합 니 다.따라서 이 예 에 대해 다음 명령 을 통 해 libmy API.a 정적 라 이브 러 리 를 생 성 할 수 있 습 니 다.

ar crv libmyAPI.a myAPI.o 
다음은 프로젝트 컴 파일 과정 에서 정적 라 이브 러 리 를 이용 할 수 있 습 니 다.이 때 my API.cpp 라 이브 러 리 함수 의 정의 파일 은 필요 없습니다.main.cpp 컴 파일 명령 은 다음 과 같 습 니 다.(의존 하 는 정적 라 이브 러 리 파일 은 의존 하 는 항목 뒤에 두 어야 합 니 다)

g++ main.cpp libmyAPI.a -o output 
컴 파일 을 통과 하면 실행 가능 한 파일 output 를 실행 할 수 있 습 니 다.이 때 libmy API.a 도 필요 하지 않 습 니 다.명령 을 실행 하고 출력 결 과 는 다음 과 같 습 니 다.

./output 

2.동적 라 이브 러 리 생 성 및 사용
Liux 에서 컴 파일 할 때-shared 인 자 를 통 해 동적 라 이브 러 리(.so)파일 을 생 성 할 수 있 습 니 다.다음 과 같 습 니 다.

g++ -shared -fPIC -o libmyAPI.so myAPI.o 
생 성 된 동적 라 이브 러 리 는 컴 파일 할 때 설명 이 필요 하고 실행 할 때 의존 해 야 합 니 다.성명 은 아래 와 같다.

g++ main.cpp -L. -lmyAPI -o output  
"-L."표 시 는 G+함수 라 이브 러 리 가 현재 디 렉 터 리 에 있 을 수 있 음 을 알려 줍 니 다."-lmyaPI"표 시 를 사용 하여 G+드라이버 가 연결 단계 에서 공유 함수 라 이브 러 리 libmyAPI 를 참조 하 는 것 을 알려 줍 니 다.so.
사용 시 다음 과 같은 오류 가 발생 하면 libmyAPI.so 를/usr/lib 디 렉 터 리 로 이동 하면 됩 니 다.

./output 

이상 의 리 눅 스 에서 g++정적 라 이브 러 리 와 동적 라 이브 러 리 를 컴 파일 하고 사용 하 는 방법 은 바로 작은 컴 파일 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기