누군가 .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
그럼에도 불구하고 실제 사용 사례가 더 많은 모듈과 함께 조금 더 복잡하다는 의심의 이점을 줄 것입니다.
도움이 되었기를 바랍니다!