C ++ LibTiff: неопределенная ссылка на _TIFFerrorHandler

0

Я пытаюсь использовать SDL_image в моем проекте, но я не могу пройти мимо этого сообщения об ошибке

||=== Build: Win32 Release in Sandbox (compiler: GNU GCC Compiler) ===|
..\lib\mingw32\libtiff4.a(tif_error.o):tif_error.c|| undefined reference to '_TIFFerrorHandler'|
..\lib\mingw32\libtiff4.a(tif_error.o):tif_error.c|| undefined reference to '_TIFFerrorHandler'|
..\lib\mingw32\libtiff4.a(tif_error.o):tif_error.c|| undefined reference to '_TIFFerrorHandler'|
..\lib\mingw32\libtiff4.a(tif_error.o):tif_error.c|| undefined reference to '_TIFFerrorHandler'|
||error: ld returned 1 exit status|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Сначала я получил неопределенные ссылки на _TIFFmalloc, _TIFFrealloc и т.д., Но я исправил их, создав исходный файл и добавив его в проект.

tif_fix.c

// This file is intended to fix the "undefined reference..." errors

#include <stdlib.h>
#include <string.h>

#include "tiffio.h"

void* _TIFFmalloc(tmsize_t s)
{
    return malloc(s);
}

void* _TIFFrealloc(void* p, tmsize_t s)
{
    return realloc(p, s);
}

void _TIFFmemset(void* p, int v, tmsize_t c)
{
    memset(p, v, c);
}

void _TIFFmemcpy(void* d, const void* s, tmsize_t c)
{
    memcpy(d, s, c);
}
int _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c)
{
    return memcmp(p1, p2, c);
}

void _TIFFfree(void* p)
{
    free(p);
}

Все библиотеки, необходимые SDL_image, скомпилированы как статические библиотеки (zlib, libpng, libjpeg, libwebp и libtiff4), и даже SDL_image скомпилирован как статический.

Я установил LOAD_BMP, LOAD_GIF, LOAD_JPG, LOAD_LBM, LOAD_PCX, LOAD_PNG, LOAD_PNM, LOAD_TGA, LOAD_TIF, LOAD_WEBP, LOAD_XCF, LOAD_XPM, LOAD_XV, LOAD_XXX в проекте SDL_image, чтобы включить библиотеки. И SDL_image, и библиотеки компилируются без проблем.

Однако, когда я связываю SDL_image и библиотеки с моим проектом приложения и пытаюсь скомпилировать пример showimage.c с SDL_image, я получаю неопределенную ссылку на... сообщение об ошибке.

Я попытался изменить порядок библиотек в проекте Code :: Blocks, потому что я знаю, что порядок важен для MinGW (я использую MinGW 4.8.2 x86). Пока ничего не работает, и у меня нет идей.

Теги:
reference
undefined
tiff

1 ответ

0
Лучший ответ

Я смог исправить ошибку и, наконец, сделать приложение для компиляции и работы, добавив две новые функции в файл tif_fix.c:

static void msdosWarningHandler(const char* module, const char* fmt, va_list ap)
{
    // Do not handle warnings
}

TIFFErrorHandler _TIFFwarningHandler = msdosWarningHandler;

static void msdosErrorHandler(const char* module, const char* fmt, va_list ap) {

    // use this for diagnostic only (do not use otherwise, even in DEBUG mode)
    /*
    if (module != NULL) {
        char msg[1024];
        vsprintf(msg, fmt, ap);
        FreeImage_OutputMessageProc(s_format_id, "%s: %s", module, msg);
    }
    */
}

TIFFErrorHandler _TIFFerrorHandler = msdosErrorHandler;

Я нашел их в файле FreeImage> PluginTIFF.cpp, поэтому кредит распространяется на FreeImage.

EDIT: после некоторого ручного поиска в библиотечных файлах LibTiff4 я нашел некоторую информацию в файле Changelog и, по-видимому, есть libtiff/tif_ {unix, vms, win32}.c, который их реализовал, но файл не был включен в мой код:: Блокирует проект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню