답변:
.o 파일을 만듭니다.
g++ -c header.cpp
이 파일을 라이브러리에 추가하고 필요한 경우 라이브러리를 만듭니다.
ar rvs header.a header.o
사용 라이브러리 :
g++ main.cpp header.a
a.out
오해의 소지가 있습니다. 왜 "절대"라는 실행 파일을 생성하지 않아야 test
합니까?
test
시스템 명령 이라는 사실과 관련이 있다고 생각합니다 . 그러나 테스트 프로그램은 일반적으로 시스템 bin 디렉토리에 설치 ./test
되지 않으며 작성하도록 요구하기 때문에 나에게도 그다지 문제가되지 않습니다 ...
a.out
형식으로 생성되지 않지만 이름은 레거시 이유로 남아 있습니다. (그리고 당신의 문제가 제대로 후 쉘을 사용하는있는 거없는 경우는. 나는 현재 디렉토리에서 실행 파일을 실행하는 방법을 하나 알고에 대한 test
것입니다 잘 당신만큼, 실행 파일 이름에있는 거 쓰기 단지 빠른 테스트 물론 스 니펫.)
test
것은 제가 후회하기 어려운 방법을 배웠으며 "쉘을 완벽하게 사용할 수 있습니다". 그것은 나쁜 생각이고, 나는 그것이 "껍질을 완벽하게 사용할 수있는"다른 많은 사람들에게 물린 것을 보았다.
다음 과 같이 유틸리티를 .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
-lHeader
대신 그렇지 -llibHeader
않습니까?
누군가 .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
그럼에도 불구하고 실제 사용 사례가 더 많은 모듈과 함께 조금 더 복잡하다는 의심의 이점을 줄 것입니다.
도움이 되었기를 바랍니다!
ranlib
는 GNU에서 단순히 ar s
.