Статическая компиляция ImageMagick с другим проектом выдает ошибки компоновщика

Я скачал исходный код ImageMagick, скомпилировал мастер для создания решения Visual Studio для статического связывания и включил проект статической библиотеки Magick++ в мой пример проекта (код ниже). Я также добавил зависимость от этого проекта и включил в решение файл.lib, ничего не помогает.

#include <Magick++.h>

int main()
{
    Magick::Image image;
    bool test = image.isValid();
    return 0;
}

Это дает несколько ошибок компоновщика, таких как:

неразрешенный внешний символ "__declspec(dllimport) public: virtual __thiscall Magick::Image::~Image(void)" (__imp_??1Image@Magick@@UAE@XZ), на который есть ссылка в функции _main

Почему он не может найти реализацию?

Я использую Visual Studio 2010 Beta 2.

2 ответа

Проблема может возникнуть из-за того, что вы используете другой компилятор, чем библиотека, скомпилированная. Поскольку ваш компилятор довольно новый, очень вероятно, что он использует другое искажение имен и не может найти сигнатуры методов внутри библиотеки.

Ответ на связывание статических библиотек ImageMagick - убедиться, что вы также связываете ВСЕ зависимые статические библиотеки!

После того, как вы скомпилировали решение для статических библиотек ImageMagick, перейдите в папку VisualMagick (в клонированном репозитории ImageMagick), а затем в папку lib, где вы увидите все файлы _DB_.lib и _RL_.lib для Debug и Релиз.

Вам необходимо включить эти имена в раздел "Дополнительные зависимости" как для выпуска, так и для отладки.

Вы также должны убедиться, что у вас есть путь к папке библиотеки в "Дополнительные каталоги библиотеки" как для выпуска, так и для отладки.

Другой ключевой аспект - обеспечение того, чтобы библиотеки были созданы тем же компилятором для той же архитектуры платформы, что и ваше собственное приложение.. (WIN32 или x64).

Эта ошибка странная - компилятор ищет функцию из DLL (__declspec(dllimport)). Вы уверены, что используете правильные заголовочные файлы?

Другие вопросы по тегам