티스토리 뷰
C에서 작성한 DLL을 C++에서 활용 가능하지만, 그러나 C++에서 작성한 DLL을 C에서 사용하는데 문제가 발생할 수 있다
이유는 C,C++ 컴파일(구조가 다름)에 따라 바이너리 코드가 다르다, 조금 더 상세히 설명하면 *맴글링 현상으로 인해
함수명을 인식하지 못하는 문제가 발생한다.
동적 링크 라이브러리(DLL, Dynamic LIck Libray)를 C,C++ 둘다 사용하도록 하기 위해 일관성이 있는 규칙이 필요하다
즉, 네임맴글링 문제를 해결을 해야한다.
이것이 바로 " extern "C" " 이 키워드를 사용하면 컴파일 시 C언어 디폴트 네임 맹글링 형태를 가짐으로써
C++문법에서 이 키워드를 사용하면 C,C++ 모두 호환 가능하다
-> extern "C" __declspec(dllexport) int 함수명(인자,인자) : 정의된 함수가 DLL에서 Export하는 함수라는 정의
* 맴글링(Name Magling) : C++ 에서 오버로딩의 경우, 같은 이름의 함수를 사용해도 인자 갯수와 타입에 따라 구별가능
이유는, 인자의 갯수와 타입에 따라 부가적인 이름이 붙어 결국은 이름이 달라짐 를 맹글링이라 함
* 정적 라이브러리 vs 동적라이브러리
- 정적 라이브러리 : 실행 파일에 그 코드가 직접 삽입되는 것은 정적 연결 라이브러리
장점 : 추가 파일 필요없음
단점 : 각 실행 파일에 코드가 포함됨으로 용량 커짐 = 즉 시스템 자원 낭비, 라이브러리가 업데이트되면 실행파일을 다시 컴파일 해야함
- 동적 라이브러리 : DLL은 기본적으로 함수와 코드 등을 모아놓음, 실행 파일 안에 코드가 삽입되는 것이 아닌, 프로그램이 실행될 때 코드가 연결되어 사용
'C, C++' 카테고리의 다른 글
Visual Studio 환경변수와 같은 Path설정 (0) | 2020.11.25 |
---|---|
Linux Windows 동적라이브러리(Dynamin Library) 둘다 혼용가능 설정 - dlsym,GetProcAddress (0) | 2020.11.25 |
[C,C++] 디버깅 (브레이크포인트)중단점 적중 문제 (0) | 2019.11.19 |
[C++] iterator 반복자 [vector 활용 예제] (0) | 2019.11.13 |
[C++] pair, make_pair [예제 소스] (0) | 2019.11.12 |