.dll/.libs를 사용하는 방법에 대한 일반적인 질문이 있습니다. 내 프로젝트에 사용할 .dll을 만들고 있지만 컴파일 할 때 .dll과 정적으로 연결해야 컴파일 할 수 있습니다 (그렇지 않으면 연결 오류가 "치명적"입니다. 오류 LNK1107 : 파일이 잘못되었거나 손상되었습니다. 0x300에서 읽을 수 없습니다. "). 나중에 프로젝트를 redistrobute하고 미래에 업데이트하면 새로운 .exe와 새 .dll이 새로운 .dll 파일이 아닌 출시 될 필요가 있습니까? 그렇다면 왜 .dll을 사용하여 귀찮게합니까?Lib 및 DLL이 exe 오류로 연결되면 "0x300에서 읽을 수 없습니다."
11
A
답변
29
.lib에는 DLL에서 내 보낸 함수 등의 스텁이 들어 있습니다. .lib를 EXE에 연결하면 EXE가 함수를 호출하는 방법을 알게됩니다. 물론 거기에는 아무런 기능이 없습니다. 로드 할 때 운영 체제가 EXE를로드하면 DLL도로드 된 다음 EXE를 패치합니다. EXE가 스텁에 호출되면 로더는이를 호출하여 DLL의 실제 함수로 바꿉니다.
일반적으로 고객에게 .lib를 제공 할 필요가 없습니다. 그러나 고객이 DLL을 사용하는 자체 EXE를 작성하려는 경우 .lib을 보내야 EXE와 EXE를 연결할 수 있습니다.
링커 오류 LNK1107은 .lib가 아니라 DLL에 연결하려고했음을 의미합니다. 정의에 따르면 DLL은 빌드시 정적으로가 아니라 런타임시 동적으로 링크되기 때문에 항상 잘못되었습니다.
관련 문제
- 1. .exe 오류로 Perl 스크립트 컴파일
- 2. C++ .exe 및 .dll이 빌드 된 시스템에서만 작동하게하는 원인은 무엇입니까?
- 3. 수 없습니다 파일 (.exe)
- 4. Info.plist에서 읽을 수 없습니다
- 5. Ruby attr_accessor를 읽을 수 없습니다.
- 6. MFC .exe 및 .dll이 동일한 코드에 대해 다른 resuls를 생성합니다.
- 7. DLL이 분산 응용 프로그램에 없습니다.
- 8. TypeError : 정의되지 않은 'auth'속성을 읽을 수 없습니다.
- 9. 쿠키를 읽을 수 없습니다.
- 10. appSettings에서 읽을 수 없습니다.
- 11. kABPersonPhoneProperty를 읽을 수 없습니다.
- 12. 'onConnet'속성을 읽을 수 없습니다.
- 13. 파일을 읽을 수 없습니다.
- 14. 값을 읽을 수 없습니다.
- 15. contracts.d를 읽을 수 없습니다
- 16. plist에서 읽을 수 없습니다
- 17. 파일을 읽을 수 없습니다.
- 18. Createmutex로 만든 전역 뮤텍스를 읽을 수 없습니다.
- 19. OpenCV에서 이미지를 읽을 수 없습니다!
- 20. subprocess.Popen에서 stderr을 읽을 수 없습니다.
- 21. SysWOW64의 dll이 응용 프로그램에서 찾을 수 없습니다.
- 22. .dll이 추가되었지만 네임 스페이스를 찾을 수 없습니다.
- 23. 읽을 수 없습니다. 클래스 라이브러리의 App.config 값
- 24. 경고를 오류로 처리하지 않음 (cc1.exe)
- 25. Python에서 JSON 파일을 읽을 수 없습니다.
- 26. SQL Server 오류로 데이터베이스를 열 수 없습니다.
- 27. "DllMain already defined"오류로 가져올 수 없습니다.
- 28. 오류로 인해 NUnit 테스트를 실행할 수 없습니다.
- 29. 파일 이름을 읽을 수 없습니다
- 30. GDB : 기호를 읽을 수 없습니다.
나는 당신이 제안한 것을 시도하고있다. 내 문제는 디버그 모드에서 빌드 할 때 lib 파일이 생성되지 않는다는 것입니다. dll 파일 만 생성됩니다. 디버그 버전에서 어떻게 lib 파일을 생성 할 수 있습니까? –
귀하의 의견은 당신이 릴리스 빌드에서 lib 파일을 얻을 수 있지만 디버그 빌드에서 얻을 것을 제안하는 것 같습니다. 그게 맞습니까? 그렇다면 두 빌드에서 동일한 링커 옵션을 설정했는지 확인하십시오 (릴리스와 디버그간에 다를 필요가있는 경우 제외). –
DLL에 DLL이 포함되어 있으면 일반적으로 링커에서 자동으로 가져 오기 라이브러리를 생성합니다 함수를 __declspec (dllexport) 특성으로 사용하거나 함수를 DEF 파일로 명시 적으로 내보내는 경우 __declspec (dllexport)는 #ifndef (_DEBUG) 또는 그와 비슷한 것으로 둘러 쌓여 있기 때문에 컴파일러에서 제외됩니까? –