c++ DLL 질문입니다.


DLL 생성은 이번이 처음인지라 질문 드립니다.

제가 DLL로 만들어서 쓸려고 하는 함수가 다른 DLL을 가져와서 사용하는 함수인데 DLL로 만들면 DLL로 추가 설정들을 그대로 가져와서 생성 된 DLL파일만 있으면 다른곳에서도 사용이 가능 한건가요?

그리고 함수 내에서 사용하는 내부 함수도 extern "C" __declspec(dllexport)를 써주면 되나요?

답변 부탁드리겠습니다 (__)

  • 2016년 11월 14일에 작성됨

  • 여긴 주로 안드로이드나 웹 관련분들이 많은거 같네요 ㅠㅠ    ToTo   2016.11.15 12:17     
조회수 428


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

  1. https://gccgnu.org/wiki/Visibility
  2. https://en.wikipedia.org/wiki/Application_binary_interface
  3. https://msdn.microsoft.com/en-us/library/a90k134d.aspx
  • 2017년 04월 17일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close