.o 파일과 .a 파일
이 두 파일 유형의 차이점은 무엇입니까? 실행 파일을 생성하는 동안 내 C ++ 앱이 두 유형에 대해 링크되는 것을 확인했습니다.
.a 파일을 빌드하는 방법? 링크, 참조, 특히 예제는 높이 평가됩니다.
.o
파일은 객체입니다. 컴파일러의 출력이며 링커 / 사서에 대한 입력입니다.
.a
파일은 아카이브입니다. 이들은 개체 또는 정적 라이브러리의 그룹이며 링커에도 입력됩니다.
추가 콘텐츠
질문의 "예"부분을 알아 차리지 못했습니다. 일반적으로 정적 라이브러리를 생성하기 위해 makefile을 사용합니다.
AR = ar
CC = gcc
objects := hello.o world.o
libby.a: $(objects)
$(AR) rcu $@ $(objects)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
이 컴파일 hello.c
및 world.c
객체로 다음 라이브러리로 보관. 플랫폼 ranlib
에 따라 아카이브에 목차를 생성하기 위해 호출 된 유틸리티를 실행해야 할 수도 있습니다 .
흥미로운 추가 정보 : .a
파일은 라이브러리가 아니라 기술적으로 아카이브 파일 입니다. 훨씬 오래된 파일 형식을 사용하지만 압축하지 않은 zip 파일과 유사합니다. 다음과 같은 유틸리티에 의해 생성 된 목차 ranlib
는 아카이브를 라이브러리로 만드는 것 입니다 . Java 아카이브 파일 ( .jar
)은 Java 아카이버에 의해 생성 된 일부 특수 디렉토리 구조가있는 zip 파일이라는 점에서 유사합니다.
.o 파일은 단일 컴파일 단위 (본질적으로 관련 헤더 파일이있는 소스 코드 파일)를 컴파일 한 결과이며 .a 파일은 라이브러리로 패키지 된 하나 이상의 .o 파일입니다.
D Shawley의 대답은 좋습니다. 다른 대답은 진행 상황에 대한 불완전한 이해를 반영하기 때문에 몇 가지 요점을 추가하고 싶었습니다.
아카이브 파일 (.a)은 오브젝트 파일 (.o)을 포함하는 것으로 제한되지 않습니다. 임의의 파일을 포함 할 수 있습니다. 종종 유용하지는 않지만 어리석은 링커 트릭을 위해 아카이브 에 포함 된 동적 링커 종속성 정보를 참조하십시오 .
또한 개체 파일 (.o)이 반드시 단일 컴파일 단위의 결과 인 것은 아닙니다. 여러 개의 작은 오브젝트 파일을 하나의 큰 파일로 부분적으로 링크 할 수 있습니다.
http://www.mihaiu.name/2002/library_development_linux/- 이 페이지에서 "partial"검색
파일 (객체 파일) 에서 파일 ( 정적 라이브러리) ar
을 만드는 데 사용할 수 있습니다..a
.o
자세한 내용은 man ar
을 참조하십시오.
.a 파일은 여러 개체 파일을 포함 할 수있는 아카이브라고 생각합니다.
참조 URL : https://stackoverflow.com/questions/654713/o-files-vs-a-files
'programing' 카테고리의 다른 글
Uglify 구문 오류 : 예기치 않은 토큰 : punc ()) (0) | 2021.01.14 |
---|---|
C # 목록 이해 소개 (0) | 2021.01.14 |
시스템 트레이에 Java 앱을 어떻게 넣습니까? (0) | 2021.01.14 |
교차 플랫폼 개행 문자와 일치하는 정규식 (0) | 2021.01.14 |
Firefox 및 Chrome은 localhost에서 느립니다. (0) | 2021.01.14 |