c++ DLL 질문입니다.

조회수 1740회

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

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

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

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

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 여긴 주로 안드로이드나 웹 관련분들이 많은거 같네요 ㅠㅠ 알 수 없는 사용자 2016.11.15 12:17

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)