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


답변:


54

.a얼마 파일은 정적 라이브러리 .so파일을 Windows에서 DLL 유사한 공유 객체 (동적) 라이브러리입니다. 이 페이지 의 차이점에 대한 자세한 정보가 있습니다.


18
.a컴파일하는 동안 프로그램의 일부로 만 포함 할 수 있습니다. .so프로그램을로드하는 동안 '가져 오기'를 수행 할 수 있습니다.
LawrenceC

2
무엇을 의미합니까?
hfrmobile

2
@hfrmobile 아카이브 의 약자 -정적 라이브러리는 ar유틸리티를 사용하여 생성 된 객체 파일의 모음입니다 . 자세한 정보는 여기
ajk

28

다음으로 .a 파일은 "ar"아카이브입니다. tar 아카이브와 달리 .o 또는 오브젝트 파일을 저장하여 아카이브에서 가져 와서 프로그램에 링크 할 수 있습니다. 원하는 경우 ar을 사용하여 다른 파일을 저장할 수 있습니다.

다음과 같이 -t 매개 변수를 사용하여 ar 파일의 구성원 목록을 얻을 수 있습니다.

ar -t /usr/lib/libc.a

.so 파일은 "공유 객체"파일이며 링커에서 더 많은 정보를 사용할 수 있으므로 멤버를로드 프로그램에 최대한 빨리 연결할 수 있습니다.

예를 들어 다음을 시도하십시오.

objdump -T /lib/libc-2.11.1.so

(또는 / lib 디렉토리에있는 libc.so의 모든 버전) .so 파일에는 파일을 다른 곳에서 찾거나 다른 것을 사용하도록 지시하는 링커 스크립트 만 포함될 수 있습니다.

흥미롭게도 .so 파일은 본격적인 프로그램 일 수 있습니다. 예를 들어, /lib/libc.so.6 실행을 시도하십시오 . (슬프게도이 마지막 부분은 더 현대적인 시스템에서는 작동하지 않는 것 같습니다. 큰 손실이 아닙니다.)


오식. 당신은 쓰는 것을 의미합니다 ar -t /usr/lib/libc.a. 실제로이 경우 -에는 필요하지 않은 것 같습니다. 또한 /lib/libc.so.6.일부 출력을 인쇄합니다. 내가 그것을 부를 지 모르겠다 full fledged program.
Faheem Mitha

1
그것은 exec가 찾을 수있는 주요 상징이 있다는 점에서 본격적인 프로그램입니다.
Hack Saw

2
ldd.so에서 실행할 수도 있으며 사용하는 다른 라이브러리가 표시됩니다. 정적은 동적 라이브러리가 아니라는 메시지와 함께 반환됩니다.
Marcin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.