상세 컨텐츠

본문 제목

[C++] extern "C" 함수 Export

C, C++

by oksk2003kr 2019. 11. 7. 15:56

본문

반응형

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은 기본적으로 함수와 코드 등을 모아놓음, 실행 파일 안에 코드가 삽입되는 것이 아닌, 프로그램이 실행될 때 코드가 연결되어 사용



반응형

관련글 더보기

댓글 영역