itsource

.o, .a 및 .so 파일의 차이점은 무엇입니까?

mycopycode 2022. 8. 21. 19:56
반응형

.o, .a 및 .so 파일의 차이점은 무엇입니까?

알고있어요.o오브젝트 파일입니다..a정적 라이브러리 및.so동적 라이브러리입니까?그들의 신체적인 의미는 무엇인가?언제 쓸 수 있고 안 쓸 수 있어요?

.a'고장'입니다.아카이브는 어떤 종류의 파일도 포함할 수 있지만 GNU 툴 체인에서는 오브젝트 파일의 라이브러리입니다(특히 Windows 사용에서는 다른 툴 체인)..lib이러한 형식은 일반적으로 범용 아카이브가 아니며 종종 툴 체인에 고유합니다.)아카이브에서 개별 객체 파일을 추출할 수 있습니다.이는 기본적으로 라이브러리를 사용할 때 링커가 수행하는 작업입니다.

.o는 오브젝트 파일입니다.이것은 머신 코드에 컴파일되지만 (일반적으로) 완전히 링크되지 않은 코드입니다.다른 오브젝트 파일(라이브러리 또는 개별적으로)에 정의되어 있는 심볼에 대한 해결되지 않은 참조가 있을 수 있습니다.오브젝트 파일에는 다른 모듈과의 링크를 지원하기 위한 메타데이터가 포함되어 있습니다.또, 옵션으로 소스 레벨의 심볼 디버깅(GDB 등)도 포함됩니다.다른 툴체인은 일반적으로 Windows에서 확장자를 사용합니다..obj보다는.o.

.so는 공유 객체라이브러리(또는 단순히 공유 라이브러리)입니다.이것은 빌드 시에 정적으로 링크되는 것이 아니라 프로그램이 기동될 때 실행 파일에 동적으로 링크됩니다.이를 통해 작은 실행 파일과 단일 개체 라이브러리 인스턴스를 여러 실행 파일에서 사용할 수 있습니다.운영체제 API는 일반적으로 공유 라이브러리로, GNU에서도 LGPL 코드를 클로즈드 소스 소유 코드로부터 분리하기 위한 라이선싱 목적으로 자주 사용됩니다(예를 들어, 저는 변호사가 아닙니다.특정 상황에서 이 접근법의 정당성에 대해 어떠한 주장도 하지 않습니다).와는 달리.o또는.a파일,.so응용 프로그램에서 사용하는 파일은 런타임 시스템에서 사용할 수 있어야 합니다.다른 시스템(일반적으로 Windows) 사용.dll(다이나믹 링크 라이브러리)를 사용합니다.

을 이해하는 것은 아마 도움이 될 것이다.o파일이 오브젝트 코드보다 먼저 링크됩니다..a심볼 해상도가 다음과 같이 충족될 경우.o파일에서는 라이브러리 구현은 링크되지 않습니다.라이브러리 구현은 기본적으로 자신의 구현으로 대체하거나 라이브러리 구현에서 사용자 정의 코드를 호출할 수 있습니다.예를 들어 GUI 프레임워크는 애플리케이션 엔트리 포인트를 호출할 수 있습니다.

정적 라이브러리는 라이브러리에 대한 개체 코드를 포함하는 아카이브로, 해당 코드가 실행 파일로 컴파일되는 응용 프로그램에 링크됩니다.

공유 라이브러리는 실행 파일로 컴파일되지 않는다는 점에서 다릅니다.대신 다이내믹 링커는 필요한 라이브러리를 찾는 디렉토리를 검색하여 메모리에 로드합니다.여러 실행 파일이 동시에 동일한 공유 라이브러리를 사용할 수 있으므로 메모리 사용량 및 실행 파일 크기를 줄일 수 있습니다.그러나 실행 파일과 함께 배포할 파일이 더 많아집니다.라이브러리가 링커를 찾을 수 있는 사용자 시스템에 설치되어 있는지 확인해야 합니다. 정적 링크는 이 문제를 해결하지만 실행 파일이 더 커집니다.

공유 라이브러리 파일도 마찬가지입니다. .a는 공유 라이브러리 파일입니다.

컴파일 및 링크만 하면 .a 라이브러리에 정적으로 링크하여 런타임 .so 파일에 동적으로 링크하여 로드할 수 있습니다.

.o는 오브젝트 파일입니다(*.c 파일에서 컴파일되어 실행 파일, .a 또는 .so 라이브러리를 작성하기 위해 링크할 수 있습니다).자세한 내용은 이쪽

언급URL : https://stackoverflow.com/questions/30186256/what-is-the-difference-between-o-a-and-so-files

반응형