Нечетные неопределенные ошибки ссылок

Хорошо, я постараюсь описать мою проблему в деталях.
Я начал использовать ziploading API для SFML для чтения игровых ресурсов из архива, я поместил все необходимые заголовки и исходные файлы в свой проект в Codeblocks, поэтому мой проект состоит из следующего:

Source files for game
ZipLoader.h
ZipLoader.cpp
ioapi.h
unzip.h
zconf.h
zlib.h

Итак, в заголовке моего игрового меню, где я пытаюсь нарисовать игровое меню на основе ресурсов в архиве, у меня есть это:

    #include <SFML/Graphics.hpp>
#include "Globals.h"#include "ZipLoader.h"
class GameMenu
{
private:
Zip::File file();

}

По сути, я попытался инициализировать zip-файл, чтобы я мог загрузить его в gameMenu.cpp, где я объявил свое меню. тем не мение Я получаю некоторые очень странные ошибки в ZipLoader.cpp, а именно:

src\ZipLoader.cpp|81|undefined reference to `unzOpen'|
src\ZipLoader.cpp|89|undefined reference to `unzLocateFile'|
src\ZipLoader.cpp|94|undefined reference to `unzOpenCurrentFile'|
src\ZipLoader.cpp|100|undefined reference to `unzGetCurrentFileInfo'|
src\ZipLoader.cpp|105|undefined reference to `unzReadCurrentFile'|
src\ZipLoader.cpp|109|undefined reference to `unzCloseCurrentFile'|
src\ZipLoader.cpp|110|undefined reference to `unzClose'|

Но я нахожу это невозможным, я подумал, что мне не хватает библиотеки, но я импортировал ее в файл, который дает мне ошибки, все перечисленные выше методы расположены в unzip.h который импортирован в файл, который дает мне ошибки, как показано ниже:

#include "ZipLoader.h"#include <SFML/System.hpp>
#include <iostream>
#include <fstream>
#include "unzip.h"
...
unzFile ZipHandle=unzOpen(DataFile); // error????

И, как вы можете видеть ниже, в unzip.h эти ссылки существуют очень хорошо:

extern unzFile ZEXPORT unzOpen OF((const char *path));
extern unzFile ZEXPORT unzOpen2 OF((const char *path,
zlib_filefunc_def* pzlib_filefunc_def));
extern int ZEXPORT unzClose OF((unzFile file));

Это, безусловно, самая странная ошибка, которую я когда-либо получал в программе на C ++, как ее можно определить, когда она тут же? (Я использую Windows XP SP3)

0

Решение

Я думаю, вы забыли добавить zlib в список библиотек.

Если вы используете MSVC, зайдите в настройки вашего проекта, откройте настройки Linker и добавьте zlib.lib (я считаю, что это имя файла libz для win32) к дополнительным зависимостям.

Если вы используете gcc, добавьте -lzlib (или это было -lz ?) к вашей командной строке.

1

Другие решения

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

Вы должны знать, где находятся эти файлы и включить их в процесс компоновки.

1

У меня была очень похожая проблема с unzGoToFirstFile. Если вы загрузите исходные коды ZLib и выполните простой «grep -irl unzGoToFirstFile», вы обнаружите, что эти функции вообще не являются частью ZLib. Они, однако, являются частью предоставленной библиотеки под названием minizip, найденной в источниках ZLib.

Добавьте это к ZLib CMakeLists.txt где-то внизу, и он создаст библиотеку с именем «libunzip.a» с необходимыми вам функциями unzGoToFirstFile и т. Д. Просто свяжите свою программу с этим, и вы должны быть золотым.

set(UNZIP_SOURCES "contrib/minizip/unzip.c""contrib/minizip/zip.c""contrib/minizip/ioapi.c")
set(UNZIP_HEADERS "contrib/minizip/unzip.h""contrib/minizip/zip.h""contrib/minizip/ioapi.h")

add_library(unzip STATIC
"${UNZIP_SOURCES}""${UNZIP_HEADERS}")

target_link_libraries(unzip zlibstatic)

install(TARGETS unzip
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )

install(FILES ${UNZIP_HEADERS} DESTINATION "${CMAKE_INSTALL_PREFIX}/include")
0
По вопросам рекламы [email protected]