c++ DLL 질문입니다.
조회수 1740회
DLL 생성은 이번이 처음인지라 질문 드립니다.
제가 DLL로 만들어서 쓸려고 하는 함수가 다른 DLL을 가져와서 사용하는 함수인데 DLL로 만들면 DLL로 추가 설정들을 그대로 가져와서 생성 된 DLL파일만 있으면 다른곳에서도 사용이 가능 한건가요?
그리고 함수 내에서 사용하는 내부 함수도 extern "C" __declspec(dllexport)를 써주면 되나요?
답변 부탁드리겠습니다 (__)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
__declspec(dllexport)
는 외부로 노출되는 함수에 한해서만 써주면 됩니다.내부에서 쓰는 함수는 그냥 하셔도 무방합니다만... 그러한 함수는 또한 header파일을 통해 노출이 안되도록하면 라이브러리 사용자가 헷갈리지 않을 수 있습니다.
또한, 크로스컴파일을 통해 ELF계열의 DSO와 DLL은 ABI[2]가 다르기 때문에 해당
__declspec(dllexport)
는 GNUC 컴파일레벨에서 에러가 날 수 있습니다[1]. 이와 같은 경우#define
으로 흔히 해결을 많이 합니다[3]. GNUC의 경우 default 선언은 export 입니다.그리고
dllexport
나__attribute__
를 통해 함수를 exporting하게 될 경우 리눅스에서는nm
명령어로 해당 심볼테이블을 볼 수 있으니 보안상 이슈가 된다면__attribute__ ((visibility ("hidden")))
과 같은 선언으로 숨겨주시면 됩니다[1].더 필요하신게 있으시면 코멘트 달아주세요.
References
댓글 입력