18

아무나 제게 설명해주십시오. 왜/clr이/mtd와 호환되지 않습니까? 대체 방법은 무엇입니까?/md 또는/mdd를 사용하면 내부적으로 어떻게됩니까?/clr이/mt 및/mtd와 Visual Studio에서 호환되지 않는 이유는 무엇입니까?

필자가 아는 한/clr과/mtd는 함께 사용하지 않습니다. 이것을 할 수있는 방법이 있는지 누군가가 설명 할 수 있습니까? 그리고/clr이/mt 및/mtd와 Visual Studio에서 호환되지 않는 이유와 이유를 설명해주십시오.

+0

/clr & mtd가 모두 필요한 이유는 무엇입니까? 성취하고자하는 바를 우리에게 말해 주면 우리가 그 일을하도록 도울 수 있습니다. –

+5

.. 그는 단지 호기심이있을 수 있습니다 :) – cwap

답변

18

나는 단서가 here 주어집니다 기대 :

당신은 /의 CLR 컴파일러 스위치를 사용하는 경우는, 코드가 가져 오기 라이브러리, msvcmrt.lib로 연결됩니다. 가져 오기 라이브러리는 라이브러리 (관리 코드간에 프록시를 제공하고 네이티브 CRT는 )를 제공하는 msvcm80.dll 라이브러리를 참조합니다. 정적으로 연결된 CRT (/ MT 또는/MTd 옵션)는/clr과 함께 사용할 수 없습니다. 대신 동적으로 연결된 라이브러리 (/ MD 또는 /MDd)을 사용하십시오.

/clr 플래그를 사용하면 코드가 새 dll msvcm80.dll을 참조하게됩니다. 이는 관리 코드와 CRT 간의 프록시 역할을합니다. 이 프록시가 무엇을하는지 정확하게 말하기는 어렵지만 관리되는 힙, 가비지 수집, 관리되는 스레드 및 그런 종류의 할당에 대한 인터페이스 역할을한다고 생각합니다. CRT의 정적 버전을 연결하면 프록시가 런타임 라이브러리에 대한 호출을 가로 챌 수 없습니다.

+0

좋은 대답, 어떻게 C++/CLI를/mt 플래그와 함께 사용할 수 있습니까? – Gilad

+0

@ 길다 드 왜 그걸 원하니? 링크하려는 라이브러리는 스레드로부터 안전하며 어쨌든 CLR을 요청하면 정적 링크가 필요하지 않으므로 어떤 단점도 볼 수 없습니다. – Suma

+11

정적 CRT 라이브러리와 연결할 수있는 주된 이유는 대상 컴퓨터에 재배포 가능 패키지를 설치하지 않아도된다는 것입니다. –

관련 문제