>  기사  >  운영 및 유지보수  >  리눅스 obj는 무엇을 의미합니까?

리눅스 obj는 무엇을 의미합니까?

藏色散人
藏色散人원래의
2023-04-17 09:38:082093검색

linux obj는 Linux에서 대상 파일인 ".o"를 나타내며, 이는 Windows의 ".obj" 파일과 동일하며, obj는 컴파일된 코드와 데이터를 저장하고 이름이 있으므로 연결 시 때때로 해결되지 않는 문제가 있습니다. 외부 기호가 나타납니다.

리눅스 obj는 무엇을 의미합니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

Linux obj는 무엇을 의미하나요?

Linux의 .a, .so 및 .o 파일에 대한 간략한 분석

리눅스 obj는 무엇을 의미합니까?

Foreword

Linux 플랫폼에 소스 코드를 설치할 때 .so 및 .o 파일을 자주 접하게 됩니다. 정보를 출력합니다. 일반적으로 말해서, 우리는 이러한 파일의 출력 정보를 잠깐 살펴보기만 하면 되며 깊이 탐색할 필요는 없습니다. 하지만 소스 코드를 직접 작성하고 수동으로 컴파일해야 한다면 이 정보에 대한 심층적인 이해가 필요합니다.

파일 설명

Linux에서 이러한 .so, .o 및 .a 파일은 실제로 Windows의 obj, lib, dll, exe 및 기타 파일에 해당합니다. Linux에서 이러한 파일을 설명하기 전에 먼저 Windows에서 이러한 파일의 역할에 대해 이야기하겠습니다.

Windows에서 obj, lib, dll, exe의 관계

exe는 우리가 일반적으로 알고 있는 실행 프로그램의 접미사인 반면, obj, lib, dll은 실행 프로그램을 구성하는 핵심 파일입니다. lib는 dll에 해당합니다. lib는 정적 링크 라이브러리의 라이브러리 파일이고, dll은 동적 링크 라이브러리의 라이브러리 파일입니다.

정적이라는 것은 링크할 때 필요한 항목을 추출하여 나중에 exe를 실행할 때 더 이상 lib가 필요하지 않음을 의미합니다. 소위 동적이란 exe가 실행될 때 이 dll이 없으면 exe가 실행될 수 없음을 의미합니다.

lib, dll, exe는 모두 최종 대상 파일이자 최종 제품으로 간주됩니다. 그리고 c/C++는 소스 코드에 속합니다. 소스 코드와 최종 타겟 파일 사이의 전환은 중간 코드 obj입니다. 실제로 중간 코드가 필요한 이유는 타겟 파일을 한 번에 얻을 수 없기 때문입니다.

예를 들어 exe를 실행하려면 많은 cpp 파일을 생성해야 합니다. 컴파일러는 한 번에 하나의 cpp 파일만 컴파일할 수 있습니다. 이런 식으로 컴파일러는 cpp를 컴파일한 후 obj로 컴파일합니다. 필요한 모든 cpp가 obj로 컴파일되면 통합되어 필수 exe로 링크됩니다. exe 링크가 실패합니다.

obj는 컴파일된 코드와 데이터를 저장하고 이름을 가지므로 연결 중에 해결되지 않은 외부 기호 문제가 발생하는 경우가 있습니다. exe로 연결하면 이름 개념은 없고 주소만 있습니다. lib는 여러 obj의 조합입니다.

이론적으로는 obj 파일을 연결하여 다른 프로젝트를 참조할 수 있습니다(obj 파일은 이를 컴파일하고 생성하는 cpp 파일과 동일하다고 생각할 수 있습니다. obj를 참조하여 cpp를 대체하거나 cpp를 추가하여 obj를 대체할 수 있습니다). 그러나 실제로 lib는 일반적으로 프로젝트 간의 상호 참조를 달성하는 데 사용됩니다.

컴파일러는 일반적으로 사용되는 일부 라이브러리를 기본적으로 연결하며, 다른 라이브러리는 사용자가 직접 지정해야 합니다.

lib와 dll의 차이점

lib은 컴파일할 때 필요하고, dll은 실행할 때 필요합니다. 소스 코드 컴파일을 완료하려면 lib이면 충분합니다. 동적으로 연결된 프로그램을 실행하려면 dll이면 충분합니다. 물론 개발 및 디버깅 단계에서는 두 가지를 모두 갖는 것이 가장 좋습니다.

일반 동적 라이브러리 프로그램에는 lib 파일과 dll 파일이 포함됩니다. lib 파일은 컴파일 중에 애플리케이션에 연결되어야 하지만 dll 파일은 런타임 중에만 호출됩니다. dll 파일이 있는 경우 해당 lib 파일은 일반적으로 일부 인덱스 정보이며 구체적인 구현은 dll 파일에 있습니다. lib 파일만 있는 경우 이 lib 파일은 정적으로 컴파일되며 인덱스와 구현이 그 안에 있습니다.

정적 컴파일된 lib 파일에는 장점이 있습니다. 사용자에게 동적 라이브러리를 설치할 때 설치할 필요가 없습니다. 그러나 애플리케이션이 상대적으로 크고 동적 라이브러리의 유연성이 손실된다는 단점도 있습니다. 버전이 업그레이드되면 동시에 새로운 애플리케이션이 출시되어야 합니다.

동적 라이브러리의 경우 2개의 파일이 있습니다. 하나는 가져오기 라이브러리(.LIB) 파일입니다. (실제로는 정적 라이브러리이기도 하지만 링크할 때 dll에 있는 함수의 항목만 링크할 수 있습니다. 실제로 함수 본문을 exe에 연결하는 실제 정적 링크 라이브러리와 달리 lib를 통한 동적 링크는 실제로 정적 링크를 사용하여 구현됩니다. 하나는 가져온 라이브러리 파일에 dll 파일의 이름과 기능이 포함되어 있습니다. dll에서 내보낸 함수. dll에는 실제 함수와 데이터가 포함되어 있습니다. 애플리케이션은 LIB 파일을 사용하여 사용해야 하는 dll 파일에 연결됩니다.

따라서 애플리케이션의 실행 파일에는 호출된 함수의 코드가 저장되는 것이 아니라, dll에서 호출될 함수의 메모리 주소가 저장됩니다. 이와 같이 하나 이상의 애플리케이션이 실행 중일 때, 프로그램 코드와 호출된 함수가 체인으로 저장되므로 메모리 자원이 절약됩니다. 위의 설명에서 볼 수 있듯이 dll 및 .LIB 파일은 애플리케이션과 함께 배포되어야 합니다. 그렇지 않으면 애플리케이션에서 오류가 발생합니다.

dll의 함수는 두 가지 유형으로 나뉩니다.

dll 내보낸 함수는 응용 프로그램에서 호출할 수 있습니다.

dll 내부 함수는 dll 프로그램에서만 사용할 수 있으며 응용 프로그램에서는 이를 호출할 수 없습니다.

.o. a Linux에서 .so 파일과 .o의 차이점은 대상 파일이며 Windows의 .obj 파일과 동일합니다.

.so는 동적 연결에 사용되는 공유 라이브러리, 공유 개체로, Windows에서는 dll, Linux에서는 실행 파일에 해당합니다.

.a는 정적 라이브러리입니다. 간단히 말해서 정적 연결을 위해 .o를 모아 놓은 것입니다. 효과는 .o와 같습니다.

정적 함수 라이브러리

특징: 실제로는 프로그램이 실행되기 전에 대상 프로그램에 추가되는 간단한 일반 대상 파일의 모음입니다.

장점: 일부 이전 프로그램과 호환됩니다. 간단한 설명을 통해 프로그래머는 코드를 다시 컴파일하지 않고도 프로그램을 연결할 수 있습니다. 즉, 외부 기능에 대한 지원이 필요하지 않아 코드를 다시 컴파일하는 시간이 절약됩니다. 개발자는 소스 코드를 비밀로 유지할 수도 있습니다.

이 유형의 라이브러리 이름은 일반적으로 libxxx.a입니다. 정적 함수 라이브러리를 사용하여 컴파일된 파일은 전체 함수 라이브러리의 모든 데이터가 대상 코드에 통합되므로 상대적으로 큽니다.

단점: 정적 함수 라이브러리가 변경되면 프로그램을 다시 컴파일해야 합니다.

공유 함수 라이브러리

공유 함수 라이브러리는 실행 프로그램이 시작될 때 로드되며, 공유 함수 라이브러리에 있는 함수는 모든 프로그램이 다시 실행될 때 자동으로 로드될 수 있습니다. 정적 함수 라이브러리와 비교하여 공유 함수 라이브러리는 컴파일 중에 대상 코드로 컴파일되지 않습니다.

공유 함수 라이브러리의 해당 함수는 프로그램이 해당 함수를 실행할 때만 호출되므로 공유 함수 라이브러리에서 생성된 실행 파일은 상대적으로 작습니다. 공유 함수 라이브러리는 프로그램에 통합되지 않으므로 실행됩니다. 프로그램 실행 시 동적으로 적용하고 호출하므로 프로그램 실행 환경에서 해당 라이브러리를 제공해야 합니다.

공유 함수 라이브러리의 변경 사항은 프로그램에 영향을 미치지 않으므로 공유 함수를 업그레이드하는 것이 더 편리합니다.

관련 추천: "

Linux 비디오 튜토리얼

위 내용은 리눅스 obj는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.