programing

.o 파일과 .a 파일

copyandpastes 2021. 1. 14. 23:35
반응형

.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.cworld.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

반응형