g ++로 정적 라이브러리를 만드는 방법은 무엇입니까? 정적 라이브러리를 컴파일하고 다른

누군가 .cpp 및 .hpp 파일에서 정적 라이브러리를 만드는 방법을 알려주시겠습니까? .o 및 .a를 만들어야합니까? 또한 정적 라이브러리를 컴파일하고 다른 .cpp 코드에서 사용할 수있는 방법을 알고 싶습니다. 내가 가진 header.cpp, header.hpp .내가 만들고 싶습니다 header.a. 에서 header.a를 테스트합니다 test.cpp. 컴파일을 위해 g ++를 사용하고 있습니다.



답변

.o 파일을 만듭니다.

g++ -c header.cpp

이 파일을 라이브러리에 추가하고 필요한 경우 라이브러리를 만듭니다.

ar rvs header.a header.o

사용 라이브러리 :

g++ main.cpp header.a

답변

다음 과 같이 유틸리티를 .a사용하여 파일을 만들 수 있습니다 ar.

ar crf lib/libHeader.a header.o

lib모든 라이브러리를 포함하는 디렉토리입니다. 이러한 방식으로 코드를 구성하고 코드와 개체 파일을 분리하는 것이 좋습니다. 모든 것을 하나의 디렉토리에 두는 것은 일반적으로 추악 해 보입니다. 위의 줄은 libHeader.a디렉토리에 생성 됩니다 lib. 따라서 현재 디렉토리에서 다음을 수행하십시오.

mkdir lib

그런 다음 위의 ar명령을 실행하십시오 .

모든 라이브러리를 링크 할 때 다음과 같이 할 수 있습니다.

g++ test.o -L./lib -lHeader -o test  

-L플래그는 얻을 것이다 g++추가 할 lib/경로에 디렉토리를. 이렇게하면 g++을 찾을 때 검색 할 디렉토리를 알 수 libHeader있습니다. -llibHeader링크 할 특정 라이브러리에 플래그를 지정합니다.

test.o는 다음과 같이 생성됩니다.

g++ -c test.cpp -o test.o 

답변

누군가 .cpp 및 .hpp 파일에서 정적 라이브러리를 만드는 방법을 알려주시겠습니까? .o 및 .a를 만들어야합니까?

예.

.o 만들기 (일반적으로) :

g++ -c header.cpp

아카이브 만들기 :

ar rvs header.a header.o

테스트 :

g++ test.cpp header.a -o executable_name

모듈이 하나만있는 아카이브를 만드는 것은 약간 무의미 해 보입니다. 다음과 같이 쉽게 작성할 수 있습니다.

g++ test.cpp header.cpp -o executable_name

그럼에도 불구하고 실제 사용 사례가 더 많은 모듈과 함께 조금 더 복잡하다는 의심의 이점을 줄 것입니다.

도움이 되었기를 바랍니다!