아래 편집자는 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.cpp1을 생성하고
명령을 사용하여 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도 더 이상 명령을 실행할 필요가 없습니다. 출력 결과는 다음과 같습니다.
./output2. 동적 라이브러리를 생성하고
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!