Связать ошибки с GraphicsMagick

Я скачал и скомпилировал GraphicsMagick, 1.3.23, Q16, x64, версию StaticMT. Мне пришлось преобразовать решение Visual Studio 7, созданное утилитой сборки GraphicsMagick, в формат Visual Studio 2015. Я связал свой проект с CORE_DB_magick_.lib и CORE_DB_Magick ++ _. Lib.

Когда компоновщик работал, он генерировал неразрешенные внешние символы при связывании InitializeMagick () и DestroyMagick ()

1> wtd.lib (WebController.obj): ошибка LNK2019: неразрешенный внешний символ __imp_DestroyMagick, на который ссылается функция «public: __cdecl Wt :: WebController :: ~ WebController (void)» (?? 1WebController @ Wt @@ QEAA @ XZ)
1> wtd.lib (WebController.obj): ошибка LNK2019: неразрешенный внешний символ __imp_InitializeMagick, на который ссылается функция «public: __cdecl Wt :: WebController :: WebController (класс Wt :: WServer» , класс std :: basic_string, класс std :: allocator> const , bool) "(?? 0WebController @ Wt @@ QEAA @ AEAVWServer @ 1 @ AEBV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ _ N @ Z)

Я не могу понять, почему символы не связаны между собой. Есть идеи?

0

Решение

По-видимому, версии GraphicsMagick Static не связываются должным образом.

0

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

Какой у вас тип проекта? У меня была похожая проблема при попытке связать библиотеки GraphicsMagick с DLL.

Подсказка в том, что __imp является украшением функции для импорта DLL, поэтому вы пытаетесь связать с функциями DLL.

Проблема в том, что заголовок magick / common.h, когда он связан с проектом DLL, читает текущую конфигурацию среды препроцессора Visual Studio, чтобы определить, в каком режиме находится библиотека, что, очевидно, неправильно, если вы пытаетесь связать статические библиотеки в вашу DLL, например. В этом случае он определяет MagickExport для __declspec (dllimport).

AFAIK это ошибка в библиотеке. Для правильной поддержки статической сборки, magick / common.h должен сделать что-то вроде чтения информации из magick / magick_config.h, чтобы определить, в каком режиме была библиотека на самом деле, и определить MagickExport соответствующим образом.

Поскольку ваша библиотека статически связана, вы можете исправить это, закомментировав все в define:

#if defined(MSWINDOWS) && !defined(__CYGWIN__)

и заменить его на:

#define MagickExport
#define ModuleExport
#define MagickGlobal
0

По вопросам рекламы [email protected]