problem z użyciem biblioteki Magick++

0

Projekt, który chce uruchomić inkluduje nagłówek Magick++.h. Ściągnąłem więc paczkę ImageMagick dla Windows ftp://ftp.imagemagick.org/pub/ImageMagick/windows/ gdzie znajduje się biblioteka Magick++. Do Microsoft SDKs skopiowałem foldery Magick++ i magic i ustawiłem poprawne ścieżki w include w odpowiednich plikach. Teraz jak uruchamiam projekt wysypuje się pełno błędów, np:
1>c:\program files\microsoft sdks\windows\v7.0a\include\magick\magick-type.h(134): error C2146: syntax error : missing ';' before identifier 'SignedQuantum'
1>c:\program files\microsoft sdks\windows\v7.0a\include\magick\magick-type.h(134): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Nie bardzo rozumiem jak mam użyć tej biblioteki, proszę o wskazówki.

0

Absolutnie nie dodaje się jakiś randomowych nagłówków do toolkitu (sdk systemowego). Przenieś je gdzieś indziej i skonfiguruj je w Visual Studio za pomocą property sheets (reużywalne kawałki konfiguracji projektów).

Instrukcja użycia Magick++ pod Visual Studio 2010.

Ściągamy paczkę z adresu, który podałeś. Rozpakowujemy do jakiegoś katalogu, w którym trzymamy biblioteki 3rd-party. U mnie cała ścieżka to będzie: D:\SharedLibs\ImageMagick-6.7.7. Najpierw trzeba tę bibliotekę skompilować i zastanowić się w jaki sposób chcemy ją do siebie linkować - statycznie czy dynamicznie. Ja wybrałem tą drugą opcję. Czytamy więc instrukcję i przechodzimy do katalogu VisualMagick\configure i odpalamy configure.exe. Wszystkie opcje zostawiamy domyślne i uruchamiamy wygenerowaną solucję w katalogu VisualMagick. Kompilujemy wszystko raz dla konfiguracji Debug i raz dla Release.
Przechodzimy teraz do naszego projektu i tworzymy nowy property sheet dla obu konfiguracji, ja nazwałem ją ImageMagick (Core). Dodajemy nowe makro o nazwie ImageMagickDir i ustawiamy na ścieżkę z naszą biblioteką zakończoną \ (przyjęło się, że wszystkie makra zakończone słówkiem Dir będą miały kończący slash), u mnie: D:\SharedLibs\ImageMagick-6.7.7\. W C\C++ \ General \ Additional Include Directories dodajemy ścieżki: $(ImageMagickDir) oraz $(ImageMagickDir)Magick++\lib. W zakładce Linker \ General \ Additional Library Directories dodajemy $(ImageMagickDir)VisualMagick\lib. To są wspólne opcje dla wszystkich konfiguracji.
Tworzymy property sheet dla konfiguracji debug, np. o nazwie ImageMagick (Shared, Debug). W Linker \ Input \ Additional Dependencies dodajemy CORE_DB_Magick++_.lib. W Build Events \ Post-Build Event \ Command Line wklejamy:

copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_bzlib_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_lcms_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_magick_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_Magick++_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_ttf_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_wand_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_xlib_.dll" "$(TargetDir)"
copy /Y "$(ImageMagickDir)VisualMagick\bin\CORE_DB_zlib_.dll" "$(TargetDir)"

Niestety ImageMagick nie wspiera systemu autolinkowania oraz posiada nadzwyczajną ilość bibliotek, więc każdy wymagany plik trzeba dodać ręcznie. Dla konfiguracji runtime analogicznie (możesz np. skompilować sobie i dodać do swojego projektu ImageMagick statycznie).

Dzięki takiemu podziałowi na pliki, widać które opcje w konfiguracji projektu są od czego i są wymiennie pomiędzy systemami, użytkownikami i projektami (wystarczy sobie wydzielić makro ze ścieżką).

0

Wielkie dzięki, mam jeszcze parę pytań. Dlaczego kompilujemy zarówno dla Debug jak i Release ? Co to znaczy dla konfiguracji runtime ? Żeby dodać ImageMagick statycznie należy odpalić configure.exe jeszcze raz i zmienić opcje ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1