.h 헤더 파일.lib 라이브러리 파일.dll 동적 링크 라이브러리 파일 관계
, , 【 】 、 、
, , 【 】
:
,
, ,
그러므로 원본 프로그램에서 라이브러리를 사용하려면 이 라이브러리의 헤더 파일을 포함해야 한다.즉, 텔레비전(라이브러리 파일)을 사용하려면 반드시 이 텔레비전의 리모컨(인터페이스, 헤드 파일)이 있어야 한다.
그러나 사용할 때lib 라이브러리 파일뿐만 아니라 헤더 파일도 포함해야 한다.
예를 들어 printf () 를 사용하면 원본 프로그램에 #include
2. 정적 링크 라이브러리는 동적 링크 라이브러리(*.dll)와 다르다.
에서
정적 라이브러리
상황에서 함수와 데이터는 하나로 컴파일된다
바이너리 파일
(일반적으로 확장자는 *.LIB)입니다.
Visual C++
컴파일러
링크 과정에서 정적 라이브러리에서 이 함수와 데이터를 복원하여 응용 프로그램의 다른 모듈과 조합하여 생성합니다
실행 파일
.
형식: #pragma comment(lib, "XXX.lib")
이 프로세스를 '정적 링크' 라고 하는데, 이 때 프로그램이 필요로 하는 모든 내용이 라이브러리에서 복사되었기 때문에
그래서
정적 라이브러리
그 자체로
실행 파일
같이 발매.
3. linux의 정적 링크 라이브러리
linux의 정적 링크 라이브러리는 *입니다.a 파일, 동적 링크 라이브러리.대응하다
linux에서.a 파일, 입구 함수를 작성하면 직접 실행할 수 있습니다
4. 정적 링크 라이브러리와 동적 링크 라이브러리는 모두 코드를 공유하는 방식이다.
정적 링크 라이브러리를 사용하면, 원하든 원하지 않든lib의 명령은 최종적으로 생성된 EXE 파일에 직접 포함됩니다.
그러나 DLL을 사용하면 이 DLL은 최종 EXE 파일에 포함될 필요가 없습니다. EXE 파일이 실행될 때 이 EXE와 독립된 DLL 파일을 '동적' 으로 인용하고 마운트 해제할 수 있습니다.
정적 링크 라이브러리와 동적 링크 라이브러리의 또 다른 차이점은 다음과 같습니다.
정적 링크 라이브러리에는 더 이상 동적 링크 라이브러리나 정적 라이브러리를 포함할 수 없고, 동적 링크 라이브러리에는 다른 동적 링크 라이브러리나 정적 링크 라이브러리도 포함할 수 있습니다.
5.'모든lib 파일은 몇 가지 함수(함수만 있다고 가정)의 정의'lib 라이브러리는 두 가지가 있는데 하나는 함수가 있는 DLL 파일과 파일의 함수 위치에 대한 정보를 포함하는 것을 내보내기 라이브러리라고 한다.
하나는 함수 코드 자체를 포함하고 일반적으로 기존의 DLL은 이전의 라이브러리를 사용한다.
이전에는 DOS에서 TC/BC 등을 사용한 후 라이브러리였습니다.함수 원형 성명을 포함하는 헤더 파일 (.h) 입니다.
"#include에 이러한 함수 선언이 포함된 헤더 파일을 사용하면 응용 프로그램에서lib 파일의 함수를 사용할 수 있습니다."
컴파일러가 해당하는 라이브러리 파일을 연결하도록 지정해야 합니다.
IDE 환경에서 일반적으로 모든 라이브러리 파일을 한 번에 지정하고 컴파일러는 각 모듈에 필요한 라이브러리를 스스로 찾는다.
명령행 컴파일 환경에서 모든 모듈이 호출하는 라이브러리를 지정해야 합니다.
6.'그러면 그는 그 함수에 대한 정의를 직접 제시한 파일, 예를 들어.cpp 파일과 헤더 파일이 무슨 차이가 있는지, 정적 링크 라이브러리가 무슨 소용이 있는지'cpp 파일은 원본 코드이고 라이브러리 파일은 컴파일된 바이너리 코드이다. 예를 들어 윈도의 API를 호출할 수 있지만 원본 코드를 볼 수 없다."그리고 알 수 없는 것은 정적 링크 라이브러리에 있는lib 파일이 사용되기만 하면 전체lib 파일의 내용을exe 파일에 넣는다는 것이다. 그러면 이것은 컴파일된 것입니까, 아니면 링크될 때 연결된 것입니까?"링크할 때lib을 대상 코드에 연결합니다.
7. 정적 링크 라이브러리(Lib)는 VC++6.0에 있는 new의libTest라는 static library 프로젝트입니다.
새 lib을 만듭니다.h와lib.cpp 파일 두 개,lib.h와lib.cpp의 소스 코드는 다음과 같습니다.
//파일: lib.h #ifndef LIB_H #define LIB_H extern "C"int add(int x,int y);//C 컴파일러, 연결 방식의 외부 함수로 성명된 것은dd () 함수는 c 컴파일러로 컴파일해야 하며, 다른 함수에 있다는 뜻이다.cpp 소스 파일에 정의되어 있습니다. #endif
//파일: lib.cpp #include "lib.h"int add(int x,int y) { return x + y; }
이 공사를 편역하면 하나를 얻을 수 있다.lib 파일, 이 파일은dd 기능을 제공하는 함수 라이브러리입니다.
헤더 파일 및.lib 파일을 사용자에게 제출하면 사용자는dd 함수를 직접 사용할 수 있습니다.(.h 헤더 파일과.lib 파일을 제출하면.lib 파일만 제공하는 것이 아니라 둘 다 주어야 한다는 것을 주의하십시오.)
표준 터보 C2.0의 C 라이브러리 함수 (우리가 사용하는 scanf, printf,memcpy,strcpy 등) 는 이런 정적 라이브러리에서 나온다.
그러나 사용할 때lib 라이브러리 파일뿐만 아니라 헤더 파일도 포함해야 한다.
예를 들어 printf () 를 사용하면 원본 프로그램에 #include
8, 다음은libTest 프로젝트가 있는 작업 구역에 있는libCall 프로젝트를 어떻게 사용하는지 보여 줍니다.
libCall 프로젝트에는 mai 하나만 포함됩니다.cpp 파일은 정적 링크 라이브러리의 호출 방법을 보여 줍니다.
소스 코드는 다음과 같습니다.
#include
정적 링크 라이브러리의 호출은 이렇게 간단합니다. 아마도 우리는 매일 사용하고 있을 것입니다. 그러나 우리는 이 개념을 이해하지 못했습니다.
코드에서 #pragma comment(lib, ".\debug\\libTest.lib")는 이 파일(main.cpp)이 생성된 것을 의미합니다.obj 파일은libTest.lib과 함께 연결됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.