2009-09-19 2 views
0

저는 Microsoft의 모든 코드 라이브러리가 무엇인지 배우고 싶습니다. 예제 라이브러리에는 atls.lib, atlsd.lib, libcmtd.lib, libcpmtd.lib가 포함됩니다. 이 도서관에 대해 알기 위해 좋은 온라인 참고 자료 나 다른 방법을 가르쳐 주시겠습니까?Microsoft의 코드 라이브러리 이해

설명 : 일반적으로 Microsoft 라이브러리에 대해 학습 할 수있는 인덱스를 찾고 싶습니다. 슬프게도, 웹에서 "libcmtd"와 같은 것을 검색 할 때 코드에 문제가있는 사람들의 포럼에 게시물을 가져옵니다. Google은 처음 몇 페이지에서 유망한 내용을보고하지 않으므로 아무 것도 없을 수도 있지만 질문 할만한 가치가 있습니다.

답변

3

ATLS.LIB는 ATL의 정적 버전입니다. (ATLSD.LIB는 그 디버그 버전입니다.) ATL 문서는 여기에서 시작됩니다. http://msdn.microsoft.com/en-us/library/t9adwcde.aspx

LIBCMTD.LIB 및 LIBCPMTD.LIB는 C 및 C++ 런타임 라이브러리의 디버그 버전입니다. 그것들은 꽤 표준적인 구현체이므로 어떤 C 및 C++ 라이브러리 참조도 가능합니다. Microsoft는 MSDN에서 문서화했습니다.

"디버그 버전"으로,이 버전의 라이브러리에는 런타임에 버그를 발견하는 데 도움이되는 추가 검사 기능이 있습니다. 이는 일반적으로 디버그 빌드에 적합합니다. 릴리스 빌드를 빌드 할 때 파일 이름에서 최종 'd'를 삭제하는 일반 버전이 필요할 것입니다.

+0

... 'mt'접미어는 다중 스레드 코드에서이 라이브러리를 호출하는 것이 안전하다는 것을 의미합니다 (예 : 'malloc'또는 'operator new'를 여러 스레드에서 호출하는 것이 안전하도록). – ChrisW

+1

또한 최소한 mscrtdXX의 경우 디버그 버전이 VSXXX 재배포 가능 패키지에 포함되어 있지 않으므로 디버그 C 런타임에 대해 컴파일 된 프로그램을 배포 할 수 없습니다.합법적 인 이유인지의 여부는 확실하지 않습니다. –

0

msvcrt.lib 및 msvcrtd.lib는 MF Microsoft Foundation 클래스를 사용하는 경우 c 런타임 라이브러리입니다.

그리고 이러한 모든 라이브러리의 유니 코드 버전도 있습니다.

afx.h를보고 을 "사용"하는 라이브러리를 선택하는 # ifdef 세트를 찾으십시오. 출력에 pragma lib 주석을 넣습니다.

다른 소스의 라이브러리 (공유 또는 비공유) 또는 다른 버전의 동일한 소스를 얻는 경우 대부분의 경우이 때문에 연결할 수 없습니다.

기본적으로 MS는 컴파일 타임에 실제로 컴파일 할 수없는 많은 컴파일 시간 결정 (예 : 라이브러리가 결정될 링크 결정, 모든 프로그램이 유니 코드 또는 비 유니 코드 .

디버그 용으로 컴파일 된 모듈을 디버그 용으로 컴파일되지 않은 모듈로 연결할 수 없습니다. 왜 하시겠습니까? 당신은 어딘가에서 도서관을 가지고 있기 때문에. 그 libary가 윈도우에서 어떤 일을한다면, 그것은 디버그가없는 라이브러리라면 그것을 사용하기 위해 모든 비 - 디버그 컴파일을 사용하도록 강요합니다. (라이브러리가 C 런타임 라이브러리 인 ATL 또는 MFC에 의존하지 않는 경우는 예외입니다. C/C++은 C++로 작성되지 않은 라이브러리에서 더 잘 작동하며, Windows는 사용하지 않는 라이브러리에서 더 잘 작동합니다. Window (mfc 또는 atl))

이 작업을 수행하는 데 도움이되는 소프트웨어 라이브러리는 더 이상 존재하지 않습니다. MS가 불가능하게 만들었습니다. 많은 MS 라이브러리가 링크하지 않거나 함께 연결되어 작동하지 않을 것이므로 에서 32, 예 32 버전을 MFC/ATL/Cruntime의 가능성을 모두 포함하도록 설정해야합니다. 연결 고리가있는 것 같습니다.