2011-02-16 4 views
0

나는 win32 실행 파일을 구축 중입니다. 컴파일러는 MinGW의 최신 버전입니다. 라이브러리 의존성은 GLUT와 libpng입니다.누락 된 zlib.dll

먼저 Windows 7 머신에서 테스트를했고 libpng3.dll 및 freeglut32.dll을 얻어야했습니다. 그러나 XP에서는 zlib1.dll을 (추가로) 획득해야했습니다.

XP 시스템은 새로 설치 한 VM 이었으므로 새로운 win7 시스템에는 zlib1이 부족할 수도 있습니다.

제 질문은 어떤 DLL을 배포해야하는지 찾는 방법입니다. 특정 시스템에서 내 프로그램을 실행하려면 동적 라이브러리가 필요합니까? 을 사전에 알고 있습니까?? 나는 이것이 설치 프로그램이 무엇을위한 것이라고 생각합니다 ... 저는 설치 프로그램이 어떤 종속성이 만족스럽지 않은지 알아 내기 위해 시스템을 살펴본 다음 그것을 제공한다고 생각합니다. 이렇게하면 내 프로그램을 배포한다면 사용자의 컴퓨터에 이미 zlib1.dll이 있는지 확인할 수 있으며 zlib1.dll이 시스템 디렉토리에 이미있는 경우 zlib1.dll을 설치하지 않습니다. 그러나 zlib가 부족한 컴퓨터에서 실행 파일을 테스트 할 때까지 필자는 특별히 "libpng requires zlib"라는 문서를 찾지 못했지만이 종속성을 알지 못했습니다. 테스트 할 모든 운영 체제의 각 버전을 새로 설치하지 않고 종속성 목록을 만들려면 어떻게해야합니까?

실행 파일을 디 컴파일하거나 런타임에 링크되는 모든 라이브러리를 찾기 위해 연결 프로세스를 검사하는 것이 하나의 아이디어입니다. 문제는 이제 이들 중 어느 것이 이미 존재해야하는지, 그리고 그 중 어느 것이 내가 배포에서 제공 할 것으로 예상되는지를 알아내는 것이다.

편집 : 좋아, 보니, 내가 다운로드 한 libpng 설치가 bin 디렉토리 안에 zlib1.dll을 제공했다. 그래서 그것을 포함하지 않는 것은 내 잘못이다. 어쨌든 다니엘의 대답은 확실합니다.

답변

1

Dependendy Walker은 프로그램의 모든 기술을 보여줍니다.

+0

이것은 완전히 대단합니다. 고맙습니다. –

+0

DLL과 관련된 거의 모든 질문에는이 도구를 참조하는 답변이 하나 있습니다 :)) – Daniel

0

이 질문에 대한 정답은 의심 할 여지없이 종속성 워커 (훌륭하고 유용한 도구)를 사용하여 솔루션을 리버스 엔지니어링하는 것이 아니라 소스에서 시작하는 것입니다.

종속성 워커의 문제점은 프로그램을 실행하는 OS에서 특정 프로그램 실행에 필요한 것이 무엇인지 알려주는 것입니다. 앱에 동적로드 종속성이있는 경우 Dep로 앱을 프로파일 링했는지 확인한 경우에만이를 선택합니다. 워커는 동적로드를 통해 강제로로드합니다.

이 문제에 대한 필자의 선호 된 접근법은 자신의 소스 코드로 시작하여 그것이 무엇에 달려 있는지 분석하고 이해하는 것입니다. 잘 알고 있기 때문에 그렇게하기가 쉽습니다.

컴파일러의 배포 요구 사항을 이해해야합니다. 대개 C++ 런타임에 정적으로 동적으로 링크 할 수있는 옵션이 있습니다. 명백히 동적 링크는 배포 요구 사항을 초래합니다.

또한 제 3 자 코드로 연결됩니다. 한 가지 예가 Windows 구성 요소입니다. 일반적으로 배포가 필요하지 않으므로 이미 배치 된 상태로 가져올 수 있습니다. 때때로 이는 사실이 아닙니다. Windows 2000의 GDI +

가끔 정적으로 제 3 자 코드에 링크 할 수도 있지만, 동적으로 링크하면 배포 요구 사항을 의미합니다.

+0

네, 감사합니다. 나의 원래 동기는 게으름이었습니다. 나는 쉬운 길을 원했습니다. 하지만 총알을 물 필요가있을 것 같아. –

+0

@Steven Dependency Walker는 훌륭한 도구이며 문제를 하향식으로 진단하는 데 매우 유용합니다. 그러나 당신은 또한 당신의 의존성을 상향식으로부터 이해하는 것에서 이익을 얻을 것입니다. –