Не можете скомпилировать с зависимостью zlib от Windows? - PullRequest
0 голосов
/ 17 декабря 2009

Я пытаюсь портировать программу, которая использует zlib, на Windows с MSVC.К сожалению, однако, после многих часов попыток я не могу заставить что-либо ссылаться на zlib.

Вот фиктивная программа, которую я использую, чтобы проверить, может ли zlib работать:

#include <zlib.h>
#include <stdio.h>

int main(void)
{
    z_stream zst;
    zst.zalloc = Z_NULL;
    zst.zfree = Z_NULL;
    zst.opaque = Z_NULL;
    zst.next_out = Z_NULL;
    zst.next_in = Z_NULL;
    zst.avail_out = 0;

    inflateInit(&zst);

    puts("hello, world!");

    return 0;
}

После установки zlib путем копирования содержимого найденного архива zlib DLL здесь *1007* в соответствующие каталоги GnuWin32 (так как при установке здесь оказалось, что он содержит неверный заголовок), я попытался скомпилироватьтестовая программа со следующим:

C:\Documents and Settings\Administrator\My Documents>cl test.c -I"C:\Program Files\GnuWin32\include" "C:\Program Files\GnuWin32\lib\zlib.lib"
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.0 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved

test.c
Microsoft (R) Incremental Linker Version 9.0030729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj
"C:\Program Files\GnuWin32\lib/zlib.lib"

Затем, когда я пытаюсь запустить test.exe, я получаю диалоговое окно с сообщением об ошибке:

Это приложение не удалось запустить, потому чтоzlib1.dll не был найден.Повторная установка приложения может решить эту проблему.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2009

Похоже, у вас есть zlib1.dll в каталоге GnuWin32? Вероятно, самый простой способ узнать zlib1.dll - это скопировать его в тот же каталог, что и test.exe. Вы также можете скачать бесплатный инструмент под названием Dependecy Walker , чтобы лучше понять, почему zlib1.dll не может быть найден.

0 голосов
/ 17 декабря 2009

Вы должны прочитать файл DLL_FAQ.txt, включенный в дистрибутив ZLIB, в каталоге Win32. Это объясняет, почему они используют ZLIB1.dll вместо ZLIB.dll, почему были внесены изменения, в чем различия, и дает вам представление о выборе, который вы можете сделать.

0 голосов
/ 17 декабря 2009

zlib1.dll должен находиться в пути или в том же каталоге, что и исполняемый файл.

...