C 언어 라 이브 러 리 의 패키지 와 사용 방법 에 대한 정리
라 이브 러 리 는 이미 작성 되 어 있 고 성숙 하 며 재 활용 가능 한 코드 입 니 다.우리 가 개발 한 응용 프로그램 에서 자주 일부 공공 코드 는 반복 적 으로 사용 해 야 하 며,이 코드 들 을 라 이브 러 리 파일 로 컴 파일 한다.
라 이브 러 리 는 대상 파일 의 집합 으로 간단하게 볼 수 있 으 며,이 대상 파일 들 을 압축 하여 포장 한 후에 형 성 된 파일 입 니 다.윈도 와 같은 플랫폼 에서 가장 많이 사용 되 는 c 언어 라 이브 러 리 는 개발 환경 에 따라 추 가 된 운영 라 이브 러 리 로 통합 되 어 있 으 며,이러한 라 이브 러 리 는 일반적으로 컴 파일 업 체 가 제공 합 니 다.
windows 에서 정적 라 이브 러 리 생 성 및 사용
정적 라 이브 러 리 생 성
새 항목 을 만 듭 니 다.설 치 된 템 플 릿 에서'일반'을 선택 하고 오른쪽 형식 에서'빈 항목'을 선택 하 십시오.이름과 솔 루 션 이름 에 staticlib 를 입력 하 십시오.확인 을 누 르 십시오.
솔 루 션 자원 관리자 의 헤더 파일 에 my lib.h 파일 을 추가 하고 원본 파일 에 my lib.c 파일 을 추가 합 니 다.
mylib.h
#ifndef MYLIB_H
#define MYLIB_H
int myadd(int a, int b);
#endif
mylib.c
# include "mylib.h"
int myadd(int a, int b) {
return a + b;
}
항목 속성 을 설정 합 니 다.(오른쪽 클릭 항목 이름)은 정적 링크 라 이브 러 리 이기 때문에 프로젝트 속성의'설정 속성'에서'일반'을 선택 하고 다음 설정 유형 에서'정적 라 이브 러 리(.lib)를 선택해 야 합 니 다.새로운 솔 루 션 을 컴 파일 하여 생 성 합 니 다.Debug 폴 더 에서 my lib.lib(대상 파일 라 이브 러 리)를 얻 을 수 있 습 니 다.이.lib 파일 과 해당 헤더 파일 을 사용자 에 게 주면 사용 자 는 이 라 이브 러 리 의 함 수 를 사용 할 수 있 습 니 다.
정적 라 이브 러 리 사용
방법 1:프로젝트 추가 중
.h 와 c 파일 을 추가 하 는 것 처럼 lib 파일 을 프로젝트 파일 목록 에 추가 합 니 다.
"솔 루 션 보기"로 전환 합 니 다.lib 를 추가 할 프로젝트 C>오른쪽 단 추 를 누 르 면 C>"추가"C>"기 존 항목"C>lib 파일 C>를 선택 하여 확인 합 니 다.
설명:
my lib.h 는 프로젝트 를 도입 하지 않 을 수 있 습 니 다.도입 하 는 역할 은 사용자 가 라 이브 러 리 에서 제공 하 는 방법 과 역할 을 이해 하 는 데 편리 하도록 하 는 것 입 니 다.
방법 2:항목 속성 설정
프로젝트 의 헤더 파일 디 렉 터 리 추가:프로젝트-속성-설정 속성-c/c+±C 일반-추가 포함 디 렉 터 리:헤더 파일 저장 디 렉 터 리 추가.
파일 참조 lib 정적 라 이브 러 리 경로 추가:프로젝트-속성-설정 속성-링크 기-일반-추가 라 이브 러 리 디 렉 터 리:lib 파일 저장 디 렉 터 리 추가.
그 다음 에 공사 에서 인용 한 lib 파일 이름 을 추가 합 니 다.공사-속성-설정 속성-링크 기-입력-추가 의존 항목:lib 파일 이름 을 추가 합 니 다.
방법 3:컴 파일 문 구 를 사용 합 니 다.
#pragma comment(lib,"./mylib.lib")
정적 라 이브 러 리 장단 점메모리 와 디스크 공간
정적 링크 라 는 방법 은 매우 간단 하고 원리 적 으로 도 이해 하기 쉽다.운영 체제 와 하드웨어 가 발달 하지 않 은 초기 에 절대 부서 시스템 은 이런 방안 을 채택 했다.컴퓨터 소프트웨어 가 발전 함 에 따라 이런 방법의 단점 은 곧 드 러 났 다.그것 은 바로 정적 링크 방식 이 컴퓨터 메모리 와 디스크 공간 에 대한 낭비 가 매우 심각 하 다 는 것 이다.특히 다 중 프로 세 스 운영 체제 에서 정적 링크 는 메모리 공간 을 크게 낭비 했다.현재 Liux 시스템 에서 일반 프로그램 은 c 언어 정적 라 이브 러 리 를 최소 1MB 이상 사용 합 니 다.그러면 디스크 에 2000 개의 프로그램 이 있 으 면 2GB 에 가 까 운 디스크 공간 을 낭비 해 야 합 니 다.
프로그램 개발 및 발표
공간 낭 비 는 정적 링크 의 문제 이 고 다른 문 제 는 정적 링크 가 프로그램의 업데이트,배치 와 발표 에 도 많은 번 거 로 움 을 가 져 올 수 있다 는 것 이다.예 를 들 어 프로그램 에서 사용 하 는 my lib.lib 는 제3자 업 체 가 제공 하 는 것 입 니 다.이 업 체 가 용량 my lib.lib 를 업데이트 할 때 우리 프로그램 은 최신 판 my lib.lib 를 가 져 온 다음 에 링크 를 다시 컴 파일 한 후에 새로운 프로그램 을 전체 사용자 에 게 발표 해 야 합 니 다.이러한 단점 은 프로그램 에 모듈 이 업데이트 되면 전체 프로그램 은 링크 를 다시 컴 파일 하고 사용자 에 게 발표 하 며 사용 자 는 전체 프로그램 을 다시 설치 해 야 한 다 는 것 이다.
windows 에서 동적 라 이브 러 리 생 성 및 사용
공간 낭비 와 업데이트 의 어려움 을 해결 하려 면 가장 간단 한 방법 은 프로그램의 모듈 을 서로 나 누 어 독립 된 파일 을 만 드 는 것 이지 정적 으로 연결 하 는 것 이 아니다.쉽게 말 하면 프로그램 을 구성 하 는 대상 프로그램 에 링크 를 하지 않 고 프로그램 이 실 행 될 때 만 링크 를 하 는 것 이다.즉,전체 링크 과정 을 운행 시 로 미 루 고 진행 하 는 것 이 바로 동적 링크 의 기본 사상 이다.
새 항목 을 만 듭 니 다.설 치 된 템 플 릿 에서'일반'을 선택 하고 오른쪽 형식 에서'빈 항목'을 선택 하 십시오.이름과 솔 루 션 이름 에 my dll 을 입력 하 십시오.확인 을 누 르 십시오.
솔 루 션 자원 관리자 의 헤더 파일 에 my dll.h 파일 을 추가 하고 원본 파일 에 my dll.c 파일 을 추가 합 니 다.
mydll.h 파일 에 다음 코드 를 추가 합 니 다:
#pragma once
//
//int mySub(int a, int b);
//
__declspec(dllexport)int mySub(int a, int b);
5.test.c 파일 에 다음 코드 를 추가 합 니 다.
#include "mydll.h"
// __declspec(dllexport)
int mySub(int a, int b) {
return a - b;
}
항목 속성 을 설정 합 니 다.이것 은 동적 링크 라 이브 러 리 이기 때문에 프로젝트 속성의'설정 속성'에서'일반'을 선택 하고 다음 설정 유형 에서'동적 라 이브 러 리(.dll)를 선택해 야 합 니 다.새로운 솔 루 션 을 컴 파일 하여 생 성 합 니 다.Debug 폴 더 에서 my dll.dll(대상 파일 라 이브 러 리)을 얻 을 수 있 습 니 다.이.dll 파일,lib 파일 과 해당 헤더 파일 을 사용자 에 게 주면 사용 자 는 이 라 이브 러 리 의 함 수 를 사용 할 수 있 습 니 다.
정적 라 이브 러 리 에서 생 성 된.lib 와 동적 라 이브 러 리 에서 생 성 된.lib 는 다르다
동적 라 이브 러 리 의.lib 는 변수의 성명 과 내 보 내기 함수 의 성명 만 넣 고 함수 실현 체 는.dll 에 넣 습 니 다.
__declspec(dllexport)는 무슨 뜻 입 니까?
동적 링크 라 이브 러 리 에는 두 가지 함수 가 정의 되 어 있 습 니 다.내 보 내기 함수(export function)와 내부 함수(internal function)입 니 다.내 보 내기 함 수 는 다른 모듈 에서 호출 될 수 있 습 니 다.내부 함 수 는 DLL 프로그램 내부 에서 사 용 됩 니 다.
동적 라 이브 러 리 의 lib 파일 과 정적 라 이브 러 리 의 lib 파일 의 차 이 는?
동적 라 이브 러 리 를 사용 할 때 두 개의 파일 을 제공 합 니 다.하 나 는 라 이브 러 리(lib)파일(라 이브 러 리 파일 가 져 오기)과 하 나 는 DLL(.dll)파일 입 니 다.라 이브 러 리 의 접미사 이름 도"lib"이지 만 동적 라 이브 러 리 의 도입 라 이브 러 리 파일 과 정적 라 이브 러 리 파일 은 본질 적 인 차이 가 있 습 니 다.DLL 파일 에 있어 서 인 라 이브 러 리 파일(.lib)은 이 DLL 에서 내 보 낸 함수 와 변 수 를 포함 하 는 기호 이름 이 고.dll 파일 은 이 DLL 의 실제 함수 와 데 이 터 를 포함 합 니 다.동적 라 이브 러 리 를 사용 하 는 경우 실행 가능 한 파일 을 컴 파일 할 때 이 DLL 의 도입 라 이브 러 리 파일 만 연결 해 야 합 니 다.이 DLL 의 함수 코드 와 데 이 터 는 실행 가능 한 파일 로 복사 되 지 않 고 실행 가능 한 프로그램 이 실 행 될 때 까지 필요 한 DLL 을 불 러 와 이 DLL 을 프로 세 스 의 주소 공간 에 매 핑 한 다음 DLL 에서 내 보 내 는 함수 에 접근 합 니 다.
동적 라 이브 러 리 사용
방법 1:암시 적 호출
주 프로그램 TestDll 을 만 들 고 my dll.h,my dll.dll,my dll.lib 를 소스 코드 디 렉 터 리 에 복사 합 니 다.
(P.S:헤더 파일 mydll.h 는 필수 가 아 닙 니 다.C++에서 외부 함 수 를 사용 할 때 먼저 설명 을 해 야 합 니 다)
프로그램 에서 링크 참조 링크 라 이브 러 리 를 지정 합 니 다:\#pragma comment(lib,"./my dl.lib")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma comment( lib,"./mydll.lib")
int main(){
printf("10 - 20 = %d
", mySub(10, 20));
system("pause");
return EXIT_SUCCESS;
}
방법 2:프로젝트 추가(예 를 들 어 정적 라 이브 러 리 사용 방법 1)방법 3:명시 적 호출
HANDLE hDll; // dll
hDll = LoadLibrary("mydll.dll"); //
MYFUNC minus_test; //
//
minus_test = (MYFUNC)GetProcAddress(hDll, "myminus");
총결산C 언어 라 이브 러 리 의 패 키 징 과 사용 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 라 이브 러 리 의 패 키 징 사용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.