Ошибка ссылки Magick ++ при попытке использовать атрибут - PullRequest
0 голосов
/ 16 апреля 2019

Используя Visual Studio 2017 Community Edition и проверенный C++ код, я получаю сообщение об ошибке при попытке скомпилировать и связать приложение Windows C++ Form.

Я пытаюсь получить данные exif изфайл изображения jpeg, использующий подход с использованием атрибута Magick ++, но я получаю ошибки ссылок LNK2028 и LNK2019 для атрибута экземпляра объекта изображения.Версия ImageMagick - 6.9.3-7, скомпилированная с заголовками Magick ++.Операционная система - Windows 10. У меня возникает та же проблема, когда я пытаюсь использовать последнюю версию Image Magick для Windows, скомпилированную аналогичным образом.

Exif-данные находятся в командной строке Windows indentify -verbose filename.

Методы Magick ++, которые я использую, такие как чтение, качество, изменение размера и запись всех ссылок и работают нормально, но атрибут не работает - (стандартная строка) extract_data = image.attribute ("exif: DateTime");выдает ошибки ссылки.

Если я закомментирую блок кода, содержащий оператор image.attribute, программа компилирует, связывает и выполняет OK.

На отдельном ПК с Windows 7 идентичныйКод C ++ компилируется, связывается и выполняется отлично.На этом ПК интегрированной средой разработки является Visual Studio 2010 Express с ImageMagick 6.8.6.

Пробовали разные версии ImageMagick в соответствии с приведенным выше описанием.

Magick::InitializeMagick(NULL);
Magick::Image image;        // create an instance of the Magick::Image class
image.read(std_input_file_name);    // read the selected jpg file into the image object 
... develop the resize parameters (not shown)
image.resize(Magick::Geometry(int_output_width, int_output_height));
... the above works fine.
... but if I include:
std::string extracted_data, date_time_data;
extracted_data = image.attribute("exif:DateTimeOriginal");
... I get the linkage errors    

Не указано никаких ошибок компиляции.

Я пытаюсь избавиться от двух ошибок связывания: неразрешенный токен LNK2028 (0A00079D) "public: класс std :: basic_string, класс std :: allocator> __thiscall Magick :: Image :: attribute (класс std:: basic_string, класс std :: allocator>) "(? attribute @ Image @ Magick @@ $$ FQAE? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@std @@ V34 @@ Z) ссылка на функцию "private: void __clrcall UseLIB :: Form1 :: btnStart_Click (класс System :: Object ^, класс System :: EventArgs ^)" (? btnStart_Click @ Form1 @ UseLIB @@ $$FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z) * ​​1021 *

и неразрешенный внешний символ LNK2019 "public: class std :: basic_string, класс std :: allocator> __thiscall Magick :: Image:: attribute (класс std :: basic_string, класс std :: allocator>) "(? attribute @ Image @ Magick @@ $$ FQAE? AV? $ basic_string @DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ std @@ V34 @@ Z) ссылка на функцию "private: void __clrcall UseLIB :: Form1 :: btnStart_Click (класс System :: Object ^, класс System :: EventArgs ^) "(? btnStart_Click @ Form1 @ UseLIB @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z) * ​​1023 *

Любой совет будет наиболее ценными благодарю вас в ожидании.

1 Ответ

0 голосов
/ 24 июня 2019

Проблема возникла из-за конфликтующих версий ImageMagick на одном ПК. И убедитесь, что MAGICK_CORE правильно установлен в переменных окружения. Как только я разобрался, программа скомпилирована, связана и выполнена ОК.

...