2011-09-21 3 views
1

저는 카메라 회사에서 일하면서 고객을 위해 SDK를 제공합니다. 이전에는 디버그가 아닌 CRT에 대해 빌드 된 SDK 릴리스 빌드 만 제공했습니다. SDK 패키지의 일부로 SDK 사용 방법에 대한 많은 예제를 제공합니다. 예제에는 디버그 CRT를 사용하는 디버그 프로젝트 구성이 있습니다. 어떤 경우에는 우리가 이상한 행동을합니다. 왜냐하면이 예제들과 그들이 링크하는 라이브러리가 다른 CRT를 사용하기 때문입니다.최종 사용자가 디버그 CRT에 연결해야하는 경우 SDK를 배포하는 가장 좋은 방법은 무엇입니까?

제 질문은 이러한 상황을 처리하는 적절한 방법은 무엇입니까? 디버그 CRT를 사용하는 라이브러리의 디버그 버전을 배포해야합니까? 우리가 pdb를 제공하지 않거나 대부분 pdb를 제거하지 않는 한 모든 독점 정보는 여전히 숨겨져 있어야합니다. 이렇게하면 더 크고 최적화되지 않은 이진 이외의 다른 부정적인 영향이 없어야한다고 가정하는 것이 맞습니까?

디버그 CRT에 연결된 디버그 이진을 배포하는 것이 일반적입니까, 아니면 릴리스 빌드 만 계속 배포해야합니까?

+2

Microsoft는 디버그 CRT를 어떤 방식 으로든 배포 할 수 있다고 생각하지 않으므로 아직 갖고 있지 않은 경우 붙어 있습니다. –

+0

우리는 디버그 CRT 자체를 배포 할 계획이 없습니다. 마이크로 소프트의 디버그 CRT를 기반으로 구축 된 라이브러리를 배포하기 만하면됩니다. 최종 사용자는 여전히 Microsoft에서 직접 실제 디버그 CRT를 획득해야합니다. 그렇지 않은 경우 디버그 CRT 누락으로 인해 예제의 dubug 버전이 컴퓨터에서 실행되지 않습니다. –

답변

2

예, 라이브러리의 디버그 및 릴리스 빌드를 배포해야합니다. 각각/MDd 및/MD로 빌드되어 CRT를 공유 할 수 있습니다. CRT의 VS2005, VS2008 및 VS2010 버전과 비교하여 다른 버전도 있습니다.

물론 이것은 고통 스럽습니다. 하나의 라이브러리로 제한하려면 클라이언트 코드에서 공개해야하는 C++ 객체 또는 포인터를 노출시키지 않도록 공용 인터페이스를 신중하게 작성해야합니다. 예외는 또한 금기 사항입니다. 일반적인 해결책은 COM을 사용하는 것입니다. 특히 자동화 호환 인터페이스는 Windows에서 일반적으로 사용되는 대부분의 언어 런타임에서 사용할 수 있습니다.

0

최적화 된 디버그 빌드가 라이브러리의 디버그 버전을 사용하도록 설정되어 있지만 모든 최적화 플래그가 릴리스 빌드와 동일하게 설정되어 있다고 생각할 수 있습니다. 이렇게하면 실행의 미묘한 차이가 사용자 환경에 영향을 미치지 않습니다.

관련 문제