Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Библиотека zlib.lib


Автор: kurlyak 5.3.2012, 18:00
Вобщим в 2005 визуальной студии пытаюсь скомпилировать проект с библиотекой zlib выдает ошибку линковки:

Error    1    error LNK2001: unresolved external symbol __imp__uncompress    TR2io.obj    

Проект написан на Си.
Скомпилировал zlib. Положил библиотеку zlib.lib в папку либов визуального студио, zlib.h в папку хеадеров, zlib.dll в папку System32. В проекте использую:

#define _WINDOWS 1
#define ZLIB_DLL 1
#include "zlib.h"
#pragma comment (lib, "zlib.lib")

и все равно выдает ошибку при линковке. Саму zlib.dll я проверял есть эта функция, она работает. Проверял уже на копии скомпилиной моего проекта. Компиленая копия не моя, тестовая, с исходниками которые я щас колупаю. В чем может быть дело?

Автор: borisbn 5.3.2012, 18:24
Код

extern "C" {
#include "zlib.h"
}

пробовал ?

Автор: kurlyak 6.3.2012, 12:24
Сделал так все заработало, спасибо. Но теперь другая проблема. При запуске моей программы вылетает ошибка "Память не может быть read". Может dll - ка Zlib к моей программе как- то не правильно скомпилена? Вроде def файл подключил. Код Dll- ки на Си, я компилил в студии 2005 сделал проект WinAPI 32 DLL. В чем проблема не знаете?

Автор: borisbn 6.3.2012, 12:42
Цитата(kurlyak @  6.3.2012,  12:24 Найти цитируемый пост)
 Может dll - ка Zlib к моей программе как- то не правильно скомпилена? Вроде def файл подключил.

def-файл вообще-то лишний. ты ж подключил h-ник и lib-ину
Цитата(kurlyak @  5.3.2012,  18:00 Найти цитируемый пост)
#include "zlib.h"
#pragma comment (lib, "zlib.lib")

Вылетать может по множеству причин. Покажи код своей программы

Автор: kurlyak 8.3.2012, 14:11
Да сама программа рабочая. Я взял рабочие исходники компилю с zlib и при запуске программы эта ошибка. Я пытаюсь сделать декомпрессию уровня из игры Tomb Raider4. Взял исходники из интернета. Код который работает с zlib привожу:

Код

typedef unsigned char      bitu8;   // 8-bit,  unsigned
typedef unsigned short int bitu16;  // 16-bit, unsigned
typedef unsigned long int  bitu32;  // 32-bit, unsigned

if (Level->EngineVersion == TombRaider_4) {
#ifdef INCLUDE_TR4_SUPPORT
      bitu16 tmp16;
      bitu32 CompressedSize,
             UncompressedSize;
      bitu8  *CompressedData;
      int    zerr;

      // Allow TR2fread() to really read the file
      LevelVersion = TombRaider_2;

      // read three unknown bitu16s
      TR2fread(&tmp16, sizeof(tmp16), 1, fp);
      TR2fread(&tmp16, sizeof(tmp16), 1, fp);
      TR2fread(&tmp16, sizeof(tmp16), 1, fp);

      // read the sizes of the 32-bit textures
      TR2fread(&UncompressedSize, sizeof(UncompressedSize), 1, fp);
      TR2fread(&CompressedSize, sizeof(CompressedSize), 1, fp);
      // skip the 32-bit textures
      fseek(fp, CompressedSize, SEEK_CUR);

      // read in the 16-bit textures, set NumTextiles
      TR2fread(&UncompressedSize, sizeof(UncompressedSize), 1, fp);
      TR2fread(&CompressedSize, sizeof(CompressedSize), 1, fp);
      Level->NumTextiles = UncompressedSize / sizeof(tr2_textile16);
      Level->Textile16 = (struct tr2_textile16_struct *)TR2alloc(sizeof(tr2_textile16) * Level->NumTextiles);
      // allocate a temporary buffer for decompression
      CompressedData = (bitu8 *)TR2alloc(CompressedSize);
      TR2fread(CompressedData, CompressedSize, 1, fp);
      // decompress the textures
      zerr = uncompress((bitu8 *)Level->Textile16, &UncompressedSize, CompressedData, CompressedSize);
      // free the temporary buffer
      free((char *)CompressedData);

      // read the sizes of the remaining textures
      TR2fread(&UncompressedSize, sizeof(UncompressedSize), 1, fp);
      TR2fread(&CompressedSize, sizeof(CompressedSize), 1, fp);
      // skip the remaining textures
      fseek(fp, CompressedSize, SEEK_CUR);

      // read the sizes of the level data
      TR2fread(&UncompressedSize, sizeof(UncompressedSize), 1, fp);
      TR2fread(&CompressedSize, sizeof(CompressedSize), 1, fp);
      // allocate a temporary buffer for decompression
      CompressedData = (bitu8 *)TR2alloc(CompressedSize);
      TR2fread(CompressedData, CompressedSize, 1, fp);
      TR4_LevelData = (bitu8 *)TR2alloc(UncompressedSize);
      // decompress the level data
      zerr = uncompress(TR4_LevelData, &UncompressedSize, CompressedData, CompressedSize);
      TR4_LevelDataOffset = 0;
      TR4_LevelDataSize = UncompressedSize;

      // Force TR2fread() to read the decompressed data
      LevelVersion = TombRaider_4;
#else    // !INCLUDE_TR4_SUPPORT
      fprintf(stderr, "Sorry, TR4 support was not compiled into this viewer.\n");
      return(NULL);
#endif   // INCLUDE_TR4_SUPPORT
      }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)