2016-02-08 2 views
0

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

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

 
1>wtd.lib(WebController.obj) : error LNK2019: unresolved external symbol __imp_DestroyMagick referenced in function "public: __cdecl Wt::WebController::~WebController(void)" ([email protected]@@[email protected]) 
1>wtd.lib(WebController.obj) : error LNK2019: unresolved external symbol __imp_InitializeMagick referenced in function "public: __cdecl Wt::WebController::WebController(class Wt::WServer &,class std::basic_string,class std::allocator > const &,bool)" ([email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 

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

ответ

0

По-видимому, GraphicsMagick Статические версии не связаны правильно.

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.

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

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

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

#define MagickExport 
#define ModuleExport 
#define MagickGlobal 
Смежные вопросы