2009-06-26 3 views
1

QT 라이브러리를 사용하여 다시 컴파일하려는 Windows 화면 보호기가 있으므로 더 많은 플랫폼에서 사용할 수 있습니다. Vista 및 XP 배포와 관련하여 문제가 있습니다.MSVCx80.dll에 의존하지 않고 QTcore4.dll을 빌드하는 방법은 무엇입니까?

내 스크린 세이버를 MT로 정적으로 컴파일하고 종속성 검사 프로그램을 실행합니다. 결과는 다음과 같습니다.

MyScreensaver.SCR에는 여러 개의 DLL, QTCORE4.DLL이 필요하지만 MSVCx80.DLL은 필요하지 않습니다. 지금까지는 문제가 없습니다.

내 문제는 그 차례에 QTCORE4.DLL에 MSVCP80.DLL과 MSVCR80.DLL이 필요하다는 것입니다. 결과적으로 내 응용 프로그램이 Vista 시스템에서 실행되지 않습니다.

MS CRT DLL에 종속성이 없도록 QTCORE4.DLL을 Microsoft 라이브러리 (어쩌면 Libcmt.lib?)에 정적으로 링크되도록 빌드 할 수 있습니까?

제한 :

  • 나는 사용자가 MS VC 재배포를 설치하고 싶지 않아요. 스크린 세이버는 단지 1 MB이며, 스크린 세이버를 위해 컴퓨터에서 많은 변화를 사용자에게 요구하는 비웃음입니다.

  • 스크린 세이버가 system32에 설치되어 있고 거기에 가능한 최소 파일을 설치하고 싶기 때문에 트릭을 사용하여 스크린 세이버와 동일한 응용 프로그램 경로에 MS CRT dll을 넣고 싶지 않습니다.

  • 마지막으로, 나는 DLL을 잔뜩

  • 내가 QT의 전체 정적 컴파일 및 링크를 시도하지 않고 있음을, 모 놀리 식 프로그램을 생산하는 것을 선호,하지만 내가 제대로 이해한다면이에 의해, (허용되지 않습니다 http://www.qtsoftware.com/developer/faqs/why-does-a-statically-built-qt-use-the-dynamic-visual-studio-runtime-libraries-do-i-need-to-deploy-those-with-my-application

다양한 방향으로 해결책을 시도 후에는 가장 실현 가능한 일이 QTCore4.dll 및 QTGui4.dll을 사용하는 것입니다 보이지만을 갖는 LGPL의)과는 또한이에 따라 사용하지 않는 것이 좋습니다 MSVCRT에 정적으로 링크됩니다. 이런 방식으로, 내 프로그램도 QT DLL도 MSVCRT dll에 의존하지 않습니다.

해결 방법이 있습니까?

감사합니다 (I는 QT 프로그래밍에 새로운 오전), 마이클

+0

업데이트 : 정적으로 QT를 구축 , 내가 링커 QTcore.lib에 포함/MT로 정적으로도 내 applitation을 구축했다. 이제 QT (QTcore.lib)의 정적 빌드가 또한 종속되어 있기 때문에 화면 보호기가 MSVCR80.DLL에 의존한다는 것을 알았습니다. MSVCR80.DLL은 위에서 말했듯이 XP와 Vista에 배포 할 수 없기 때문에 저에게 장애물입니다. 질문 : 이제 MSVCR80.DLL에 의존하지 않고 QT 응용 프로그램을 빌드 할 수있는 방법이 있습니까? 도움을 주셔서 감사합니다 마이클 – Mike

답변

1

나는 그들이 당신의 응용 프로그램의 일부가 컴파일 될 것이라고으로 행한 생각/MD (D) 및/MT (D)와 부품, 하지만 (제 3 자 라이브러리를 포함하여) 모든 것을 제어한다면/MT (d)를 사용하는 것이 안전합니다.

+0

감사합니다. 셰이, 정적 연결 만들기를 시도합니다. 정적 링크를 시도한 이전 시간에 응용 프로그램이 종료 될 때 오류가 발생했습니다. 오류는 내 코드가 끝난 후에 발생했으며 정적 링크 때문에 문제가 있다고 생각했습니다. 따라서 QT DLL을 MS CRT 라이브러리에 정적으로 연결하는 데 응답이 있는지 확인하기 위해 약간 기다릴 것입니다. 이것을 할 수있는 방법이 있다면, 저는 그렇게하는 것을 선호합니다. – Mike

1

당신은 두 가지 옵션이 있습니다

  • 그 의존성이 Microsoft Visual C++ Runtime 도서관의 일부를, 당신이 당신의 installshiled에서 해당 라이브러리를 배포 할 수 있으며, 사용자가 자동으로 설치, MSVCRT 라이브러리는 당신에게 기본적으로 Windows에서 반드시 포함되지 installshield에 런타임 라이브러리를 배포하고 응용 프로그램 디렉토리에 Qt*.dll 개의 DLL을 복사하십시오.

  • Runtime 및 Qt의 주요 종속성이있는이 옵션을 사용하면 하나의 실행 파일이 있지만 정적으로 컴파일하려면 Qt 상업용 라이센스가 있어야합니다.

관련 문제