programing

.a.o 파일과 .lo 파일의 차이점

prostudy 2022. 9. 3. 08:58
반응형

.a.o 파일과 .lo 파일의 차이점

와의 차이는 무엇입니까?.a .o그리고..loC에 파일링 할 수 있나요?

.o, .a, .lo, .so의 차이점.

이그제큐티브 서머리

  • .o는 일반적으로 컴파일러가 내보내는 비 PIC 객체 파일입니다(링커 단계 이전).exe와 링크하면 코드가 실행 파일에 포함됩니다.링크 시에 바인드합니다.
  • .a는 일반적으로 하나 이상의 .o 파일[비 PIC]을 포함하는 아카이브 라이브러리입니다.exe와 링크하면 아카이브 내의 특정 "*.o" 파일이 실행 파일에 삽입됩니다.
  • .lo는 일반적으로 gcc -fPIC를 사용하여 수동으로 컴파일하거나 libtool을 사용하여 PIC 코드를 포함하는 "라이브러리 객체"입니다.
  • .so 파일은 "공유 객체" 파일입니다.여기에는 PIC 개체가 포함됩니다.

주의:

  • 정적 실행 파일이 필요한 경우 ".o" 및 ".a" 파일을 사용하십시오.
  • 런타임에 라이브러리와의 바인드가 동적 실행 파일이 필요하거나 필요한 경우 .lo.so 파일을 사용합니다.

서론

위의 답변은 마음에 들지만 .a/archive 라이브러리 양식은 다루지 않습니다.이 세 가지 모두에 대해 설명하겠습니다.또, .so 라이브러리 형식에서의 추가에 대해서도 설명하겠습니다.또한 stackexchange의 관점에서 링크가 끊어질 경우에 대비하여 더 많은 텍스트를 사용합니다(이것에는 참조 링크가 필요 없었습니다).

파일 형식 .o

.o 파일을 컴파일 할 때 대상 플랫폼의 컴파일러가 내보낸 오브젝트 코드를 포함하는 오브젝트 파일입니다..o 파일을 작성하려면:

gcc -c filename.c     <==== creates filename.o

이 예에서는 POC(Position Independent Code)는 작성되지 않았습니다.정적 라이브러리 또는 실행 파일에 포함할 수 있는 개체로 간주합니다.즉, 실행 파일을 .o 파일과 링크하면 .o 파일의 코드가 실행 파일에 삽입됩니다.실행 시간이 아닌 빌드 시간에 바인딩됩니다.즉, .o 파일을 포함하지 않고 실행 파일을 재배포할 수 있습니다.주의: .o 파일은 PIC 이외의 파일로 간주됩니다.일반적으로 PIC 오브젝트 파일에는 .lo 확장자를 붙입니다.

파일 형식 .a

.a 파일 형식은 "아카이브" 라이브러리입니다.하나 이상의 .o 파일이 포함되어 있으며 일반적으로 정적 실행 파일을 만드는 데 사용됩니다.

ar 명령어를 사용하여 아카이브 라이브러리를 조작합니다.아래 예제에서는 (1) .o 파일에서 아카이브 라이브러리를 만들고 (2) 파일의 내용을 나열합니다.

라이브러리 작성

$ ls *.o
a.o  b.o  c.o                 <=== the files going in the archive

$ ar q libmyStuff.a *.o       <=== put *.o files in an archive (or new one)
ar: creating libmyStuff.a    

$ ls *.a                      <=== just show the library created
libmyStuff.a

아카이브 라이브러리의 내용 표시

$ ar t libmyStuff.a
a.o
b.o
c.o

파일 형식 .lo

.lo 사용은 위치 독립 개체 파일에 자주 사용되는 규칙입니다.현재 디렉토리에서 libtool compile 명령어는 .lo 파일과 .o 파일을 모두 만듭니다.하나는 PIC 코드가 있고 다른 하나는 PIC 코드가 없습니다.다음의 출력을 참조해 주세요.

$ libtool compile gcc -c a.c
libtool: compile:  gcc -c a.c  -fPIC -DPIC -o .libs/a.o  <== PIC code
libtool: compile:  gcc -c a.c -o a.o >/dev/null 2>&1     <== Not-PIC code

$ ls a.lo a.o
a.lo  a.o       <=== a.lo contains the PIC code.

또한 .libs 서브디렉토리는 a.o로 작성되어 있습니다.이름에도 불구하고 이 파일은 PIC 코드입니다.Libtool은 이 파일을 현재 디렉토리로 이동하고 확장자를 .lo로 변경했습니다.

컴파일할 때 gcc에 대한 PIC 옵션을 사용하는 것만으로 항상 .lo 파일을 수동으로 작성할 수 있습니다.결과 .o 파일을 .lo 확장자로 이동합니다.

파일 형식 .so

규칙에 따르면 .so는 "공유 객체" 라이브러리 파일을 의미합니다.PIC 오브젝트 파일을 공유 라이브러리에 넣습니다..o.a 파일에 대한 계약에서는 .so 파일과 링크할 때 코드는 컴파일된 파일에 포함되지 않습니다.즉, 실행 시간 바인딩을 사용합니다(.lo의 경우와 같습니다).런타임 바인딩에는 여러 가지 형식이 있지만 여기서는 설명하지 않습니다.

.lo' 파일은 공유 라이브러리에 내장될 수 있는 라이브러리 개체이며, .o 파일은 표준 개체 파일입니다.

.lo 파일은 libtool 객체입니다.libtool은 공유 라이브러리에 어떤 객체파일을 작성할 수 있는지 판단하기 위해 사용합니다.

.lo수 에는 공유 라이브러리에 할 수 있습니다..ofile은 표준 객체 파일입니다.상세 정보:libtool 공유 라이브러리(.lo 파일)를 설치하고 사용하는 방법

언급URL : https://stackoverflow.com/questions/5895649/difference-between-a-o-and-lo-file

반응형