2011-02-04 5 views

답변

5
라이브러리 정적으로이 연결되어 제 .lib

, 그것은 Linker에 의해 및 link-time발생 링크시 이름 기호runtime 전에 해결에 그들이 창조하고 목적, 입니다 . 그들은 입니다. 종종은 "정적 라이브러리" 인 (이 태그를 질문에 추가했습니다!)이라고합니다. 그것은 lib의 간단한 이야기입니다.

그러나 실제로 런타임에 링크하려는 경우 DLL 래퍼를 만들 수 있습니다.

+2

사실, 이러한 라이브러리는 기본적으로 ** 정적 **입니다! – Emmanuel

2

아니요 대신 DLL을 만들거나 소스가없는 경우 .lib의 기능을 자체 DLL 인터페이스로 포장하십시오.

+0

사실 그 인터뷰에서 물었다. 어쨌든 +1 정보. – bjskishore123

0

- 직접적으로 아니지만 매우 적은 양의 작업으로.

새 .DLL 프로젝트를 만들고 .lib를 연결하고 .DEF 파일로 내보낼 함수를 정의한 다음 컴파일하십시오.

1

아니요. 불가능합니다. DLL은 프로세스에로드 할 모든 정보가있는 PE32 헤더가있는 모듈입니다. LIB는 OBJ 파일의 아카이브 일뿐입니다.

다른 사람들도 DLL을 감싸기 쉽다고 말하기는하지만 상당히 어려울 수 있습니다. 그 이유는 .LIB가 일부 종속성을 해결할뿐만 아니라 해결되지 않은 외부를 가질 수도 있기 때문입니다.

이러한 확인되지 않은 외부 DLL의 컴파일러 런타임 라이브러리 만 랩핑하면됩니다. 아마도 최소한의 C++ 소스를 사용하여 DLL 프로젝트를 만들 때이를 확인하고 컴파일하려고합니다. 더 많은 외부 자료가 다른 도서관으로 해결되어야한다면 더 많이 보게 될 것입니다.

메모리 관리에서 하나의 중요한 문제가 발생할 수 있습니다. 정적으로 .LIB와 링크하면 모두 같은 정의가 사용됩니다. 라이브러리에 자체 구현이 포함되어있는 경우 malloc-stlye 함수를 예로 들어 보겠습니다.이 모든 심볼을 EXPORT 목록에 추가하는 한 응용 프로그램과 링크되지 않습니다. EXPORT 테이블에 포함되어야하는 공용 기호 목록을 찾는 것은 어려울 수 있습니다.

관련 문제