./MT 플래그로 컴파일 된 DLL이 있다고 가정하면 컴파일 된 프로젝트/dll에서 DLL을 사용할 수 없습니다. 내 질문은 내가 LoadLibrary()를 사용하여 DLL을로드하는 경우, 그것은 또한 동일한 C 런타임이 필요합니까? 내가하지 않으면 잠재적 인 위험은 무엇입니까?
/MT 플래그를 사용하면 런타임이 정적으로 이진 파일에 링크되어 있다고 생각합니다. 하지만 내 DLL 프로젝트 중 하나에 대해/MT와 함께 DLL을 만들었습니다. 그러나, 나는 dumpbin.exe/dependents mydll 때, MSVCR100.dll이 종속임을 보여줍니다. 내 질문에 DLL은 여전히 MSVCR100.dll에 의존하는 이유는 무엇입니까?
1
나를 혼란스럽게 두 가지 질문이 있습니다
나는 우리가 같은 프로젝트에서 다른 C 런타임을 사용할 수 없습니다 Microsoft 웹 사이트에서 읽을
A
답변
2
1) 아니오, 필수 사항은 아닙니다. 이것은 모든 프로그램에서 발생하며 Windows DLL은 예를 들어 자체 CRT를 사용합니다. 그러나 하나의 프로그램에서 CRT를 혼합하는 것은 매우 위험하며 문제를 진단하기가 매우 어려워 질 수 있습니다. Windows api는 이러한 문제를 피하기 위해 신중하게 설계되었으므로 DLL에 할당 된 메모리를 해제하고 예외를 사용하지 않으며 표준 C++ 라이브러리 클래스를 사용하지 않고 로켈 또는 다른 유형에 의존하지 마십시오 공유 CRT 상태 당신이 섞을 때 잘못되는 종류의 것들. 자신을 C 또는 COM API로 제한하면 이러한 함정을 피할 수 있습니다.
2) 이것은/MD로 컴파일 된 코드를 링크 할 때 발생합니다. .libs와 연결하는 것이 일반적입니다.
프로젝트에 DLL이 있고 정확히 동일한 컴파일러와 옵션을 사용하여 모두 코드를 컴파일하면 항상/MD를 사용하여 문제가 발생하지 않습니다. 자신을 구축하지 않은 정적 라이브러리는 매우 번거롭고 피할 수 있습니다.
1
2. 귀하의 질문과 관련하여 의존성은 간접적입니다. DLL은 MSVCR100.dll에 의존하는 DLL을 사용합니다. Dependency walker을 사용하면 구성 요소의 종속성 트리를보고 어떤 라이브러리가 직접 및 간접적으로 종속되는지 확인할 수 있습니다.
관련 문제
- 1. 을 LoadLibrary 정적/전역 및 스레드
- 2. JVM은에서 LoadLibrary() VC++
- 3. AfxLoadLibrary 대 LoadLibrary
- 4. C++ LoadLibrary() 현재 경로에서
- 5. C# LoadLibrary from byte []
- 6. LoadLibrary LPCTSTR 복용
- 7. LoadLibrary 998 오류
- 8. Ruby에서 LoadLibrary 및 GetProcAddress
- 9. ASM : LoadLibrary & GetProcAddress
- 10. STATUS_STACK_BUFFER_OVERRUN (LoadLibrary 포함)
- 11. Null을 반환하는 LoadLibrary
- 12. LoadLibrary ("MSVCR90D.dll") Fail
- 13. 등을 LoadLibrary 및 GetProcess와 객체에게
- 14. 자이 썬, 서브 프로세스 및 msvcrt ... 가능합니까?
- 15. LoadLibrary 호출 시스템 오류 wpcap.dll
- 16. 다른 'dll'확장자를 가진 파일의 LoadLibrary
- 17. 64 비트 파이썬 ctypes에서 msvcrt 사용
- 18. KRL gem 및 msvcrt-ruby * .dll
- 19. msvcrt : 디버거에서 메모리 사용량이 많지 않지만
- 20. Visual C++ 런타임 라이브러리 배포 (MSVCRT)
- 21. 디버그에 대해 .lib가 빌드되었는지 검색 MSVCRT
- 22. Windows의 Ruby on Rails 문제 [msvcrt-ruby18.dll 오류] - 초보자 용 질문
- 23. Vista 및 XP에서 LoadLibrary 함수가 null을 반환합니다.
- 24. C++ LoadLibrary API의 이미지베이스를 제어하는 방법
- 25. 원격 스레드가 오류가있는 LoadLibrary 호출에 실패했습니다.
- 26. Windows에서 Libtool 및 LoadLibrary()가있는 모듈
- 27. LoadLibrary() - "잘못된 액세스 메모리 위치 (998)"
- 28. C#을 문제
- 29. C#을 DataContractSerializer 문제
- 30. C#을 COM은 문제