.a 및 .so 파일이란 무엇입니까?


427

현재 C 응용 프로그램을 AIX 로 이식하려고하는데 혼란스러워합니다. .a 및 .so 파일이란 무엇이며 응용 프로그램을 빌드 / 실행할 때 어떻게 사용됩니까?


116
하나는 도서관이다 archive 및 기타입니다 shared object
Shiplu Mokaddim

답변:


483

아카이브 라이브러리 (.a)는 gcc에서 -c 옵션을 사용하여 프로그램을 컴파일 할 때 정적으로 링크됩니다. 따라서 라이브러리에 변경 사항이 있으면 코드를 다시 컴파일하고 빌드해야합니다.

.a 라이브러리에 비해 .so (공유 객체)의 장점은 런타임 동안 (즉, gcc에서 .o 파일 -o 옵션을 만든 후) 링크되어 있다는 것입니다. 따라서 .so 파일에 변경 사항이 있으면 기본 프로그램을 다시 컴파일 할 필요가 없습니다. 그러나 주 프로그램이 ln 명령으로 새 .so 파일에 연결되어 있는지 확인하십시오.

이렇게하면 .so 파일을 작성하는 데 도움이됩니다. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

도움이 되었기를 바랍니다.


2
이들 중 어느 것이 pic(위치 독립적 코드)와 관련이 있습니까?
transang

213

.a는 정적 라이브러리입니다. 내부에 저장된 코드를 사용하면 코드를 가져 와서 자신의 바이너리에 포함시킵니다. Visual Studio에서이 파일은 .lib 파일입니다.

.so는 동적 라이브러리입니다. 그 안에 저장된 코드를 사용하면 자신의 바이너리에 포함되지 않습니다. 대신 방금 참조되었으므로 바이너리는 바이너리에 의존하며 so 파일의 코드는 런타임에 추가 /로드됩니다. Visual Studio / Windows에서 이러한 파일은 .dll 파일 (링크 정보가 포함 된 작은 .lib 파일)입니다.


안녕하세요 c / c ++ 코드에서 .so 파일을 디 컴파일하는 옵션이 있습니까?
Jishant


작은 .lib파일을 .dll가져 오기 라이브러리라고합니다.
Money Oriented Programmer

13

.a 파일은 일반적으로 정적으로 링크 된 라이브러리 (보다 정확하게 아카이브)이며
.so는 동적으로 링크 된 라이브러리입니다.

포트를 수행하려면이를 작성하기 위해 컴파일 된 소스 코드 또는 AIX 시스템에서 동등한 파일이 필요합니다.


.so 파일을 사용하도록 응용 프로그램을 어떻게 빌드합니까?
Dunc

두 가지 유형의 라이브러리를 구축하고 웹에서 링크하는 방법에 대한 훌륭한 참고 자료가 많이 있습니다. 구글은 당신의 친구입니다.
David Pointer

@Dunc-몇 가지 방법이 있습니다. makefile이 있습니까? 일반적으로 전체 프로그램을 어셈블하여 링커를 호출하는 명령은 -L / dir / dir1 /.../을 사용하여 라이브러리 파일을 찾을 위치를 지정하고 -lname을 사용하여 라이브러리의 이름을 명시 적으로 지정할 수도 있습니다. 실제 이름은 libname.a 또는 libname.so입니다. 그런 다음 링커는 이것이 정상적인 프로그램이라면 어떻게해야하는지 알아낼 수 있습니다. 그러나 여전히 .so 파일을 만들거나 찾는 데 문제가 있습니다. 빌드 할 소스 코드 또는 AIX 라이브러리가 있습니까?
gbulmer

10

연결 단계에서 사용됩니다. .a파일은 정적으로 연결되고 .so파일은 정렬되어 있으므로 exe를 실행할 때마다 라이브러리가 필요합니다.

당신은 그들이 LIB 디렉토리의보고에 의해 저장되는 위치를 찾을 ... 수 /usr/lib/lib그들의 대부분을 가지고 있고, 또한이 LIBRARY_PATH환경 변수.


0

Wikipedia는이 정보의 적절한 출처입니다.

.a와 같은 정적 라이브러리 파일에 대해 배우려면 정적 라이브러리를 읽으 십시오.

.so read Library_ (computing) #Shared_libraries 와 같은 공유 라이브러리 파일에 대해 알아 보려면 파일 이름 지정 섹션 에도 유용한 정보가 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.