> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > Linux에서 g++ 컴파일과 정적 및 동적 라이브러리 사용에 대한 자세한 설명

Linux에서 g++ 컴파일과 정적 및 동적 라이브러리 사용에 대한 자세한 설명

黄舟
풀어 주다: 2017-05-28 11:32:40
원래의
4696명이 탐색했습니다.

아래 편집자는 Linux g++에서 static 라이브러리와 동적 라이브러리를 컴파일하고 사용하는 방법에 대한 기사를 가져올 것입니다. 편집자는 이것이라고 생각합니다. 꽤 좋습니다. 지금 공유해서 참고용으로 올려보겠습니다.

windows 환경

에서는 일반적으로 VS 프로젝트와 같은 IDE에서 C++ 프로젝트를 개발합니다. 정적 라이브러리(*.lib) 및 동적 라이브러리(*.dll) 사용은 이미 익숙할 수 있지만 Linux 환경에는 해당 정적 라이브러리(*.a) 및 동적 라이브러리와 같은 또 다른 모드 세트가 있습니다. (*.so)는 다른 방식으로 생성되고 사용됩니다. 처음에는 익숙하지 않을 수 있지만 VS의 구성만큼 단계가 복잡하지 않기 때문에 많이 사용한 후에는 익숙해져야 합니다. Linux에서 정적 라이브러리와 동적 라이브러리를 생성하고 사용하는 방법을 정리하면 다음과 같습니다. (C++ 프로젝트이므로 컴파일러에서는 g++를 사용하지만 gcc를 사용하는 것과 동일합니다.)

우선 , 준비 작업

은 필요한 내용을 캡슐화하는 것입니다. 라이브러리 파일의

function에 대한 헤더 파일과 소스 파일은 다음과 같이 작성됩니다.

//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; 
}
로그인 후 복사

마지막으로 먼저 myAPI.cpp 파일을 컴파일하여 myAPI.o 대상 파일

g++ -c myAPI.cpp
로그인 후 복사

1을 생성하고

명령을 사용하여 Linux에서 정적 라이브러리를 생성하여 myAPI를 처리합니다. .o 파일을 생성하여 정적 라이브러리 파일을 생성합니다. 생성된 라이브러리 파일은 사양을 따라야 하며 Linux의 라이브러리 파일에는 "lib" 접두사가 추가되어야 합니다. 따라서 이 예제에서는 다음을 통해 libmyAPI.a 정적 라이브러리를 생성할 수 있습니다. 명령:

ar crv libmyAPI.a myAPI.o
로그인 후 복사

그러면 프로젝트 컴파일 과정에서 정적 라이브러리를 사용할 수 있습니다. 이때 라이브러리 함수 myAPI.cpp의 정의는 더 이상 필요하지 않습니다. main.cpp 컴파일 명령은 다음과 같습니다. 종속 정적 라이브러리 파일은 종속성 뒤에 배치되어야 합니다.

g++ main.cpp libmyAPI.a -o output
로그인 후 복사

컴파일이 완료되면 실행 파일 출력을 실행할 수 있습니다. 이때 libmyAPI.a도 더 이상 명령을 실행할 필요가 없습니다. 출력 결과는 다음과 같습니다.

./output
로그인 후 복사

2. 동적 라이브러리를 생성하고

Linux에서 컴파일할 때 -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 디렉토리로 이동하세요. 으르르르르

위 내용은 Linux에서 g++ 컴파일과 정적 및 동적 라이브러리 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿