Статическая компиляция 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)). Вы уверены, что используете правильные заголовочные файлы?