Newsgroup: it.comp.lang.c
Titolo: ImageMagick DevC++ [linker error]

Ho un problema nell'utilizzare un semplice programma in C che fa uso
delle librerie ImageMagick usando il DevC++ ed il Glade per Windows
(Gkk)
Dopo aver installato le librerie ImageMagick-6.3.2-9-Q8-windows-
dll.exe nel mio Windows2000, nel sorgente ho inserito l'include:
          #include <gtk/gtk.h>
          #include <magick/MagickCore.h>
          #include <wand/MagickWand.h>
          ......
          .....
         MagickWandGenesis();
         InitializeMagick((gchar *)NULL);
mentre nelle opzioni di compilazione ho inserito i due percorsi per le
librerie statiche:
         C:\Programmi\ImageMagick-6.3.2-Q8\lib
         C:\Programmi\ImageMagick-6.3.2-Q8\include
A questo punto ho inserito sul sorgente C un paio di funzioni che
fanno uso di queste librerie per fare un test,
quindi ho lanciato la compilazione.
L'errore generato e nel linkaggio degli oggetti:
         [Linker error] undefined reference to `InitializeMagick'
         [Linker error] undefined reference to `MagickWandGenesis'
         ld returned 1 exit status
         C:\Gtk_doc\Projects\project1\devcpp\Makefile.win [Build
Error]  [project1.exe] Error 1
Controllando il Makefile.win generato automaticamente dal DevC++ non
mi sembra di riscontrare dei problemi:
--------------------------------------------------------------------------
# Project: project1
# Makefile created by Dev-C++ 4.9.9.2
CPP  = g++.exe
CC   = gcc.exe
WINDRES = windres.exe
RES  =
OBJ  = ../src/main.o ../src/callbacks.o ../src/interface.o ../src/
support.o ../src/logics.o $(RES)
LINKOBJ  = ../src/main.o ../src/callbacks.o ../src/interface.o ../src/
support.o ../src/logics.o $(RES)
LIBS =  -L"C:/Dev-Cpp/lib" -L"C:/Programmi/ImageMagick-6.3.2-Q8/lib" -
mwindows -L"$(GTK_BASEPATH)/lib" -lgtk-win32-2.0 -lgdk-win32-2.0 -
latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -
lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv
INCS =  -I"C:/Dev-Cpp/include"  -I"C:/Programmi/ImageMagick-6.3.2-Q8/
include"  -I"."
CXXINCS =  -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/
include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"
-I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"  -I"."
BIN  = project1.exe
CXXFLAGS = $(CXXINCS) -mms-bitfields -mwindows -DHAVE_CONFIG_H -I"$
(GTK_BASEPATH)/include/gtk-2.0" -I"$(GTK_BASEPATH)/lib/gtk-2.0/
include" -I"$(GTK_BASEPATH)/include/atk-1.0" -I"$(GTK_BASEPATH)/
include/pango-1.0" -I"$(GTK_BASEPATH)/include/glib-2.0" -I"$
(GTK_BASEPATH)/lib/glib-2.0/include" -I"$(GTK_BASEPATH)/include/cairo"
-I"$(GTK_BASEPATH)/include" -DPACKAGE_PREFIX=\"\" -DPACKAGE_DATA_DIR=
\"\" -DPACKAGE_LOCALE_DIR=\"\"
CFLAGS = $(INCS) -mms-bitfields -mwindows -DHAVE_CONFIG_H -I"$
(GTK_BASEPATH)/include/gtk-2.0" -I"$(GTK_BASEPATH)/lib/gtk-2.0/
include" -I"$(GTK_BASEPATH)/include/atk-1.0" -I"$(GTK_BASEPATH)/
include/pango-1.0" -I"$(GTK_BASEPATH)/include/glib-2.0" -I"$
(GTK_BASEPATH)/lib/glib-2.0/include" -I"$(GTK_BASEPATH)/include/cairo"
-I"$(GTK_BASEPATH)/include" -DPACKAGE_PREFIX=\"\" -DPACKAGE_DATA_DIR=
\"\" -DPACKAGE_LOCALE_DIR=\"\"
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before project1.exe all-after
clean: clean-custom
	${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
	$(CC) $(LINKOBJ) -o "project1.exe" $(LIBS)
../src/main.o: ../src/main.c
	$(CC) -c ../src/main.c -o ../src/main.o $(CFLAGS)
../src/callbacks.o: ../src/callbacks.c
	$(CC) -c ../src/callbacks.c -o ../src/callbacks.o $(CFLAGS)
../src/interface.o: ../src/interface.c
	$(CC) -c ../src/interface.c -o ../src/interface.o $(CFLAGS)
../src/support.o: ../src/support.c
	$(CC) -c ../src/support.c -o ../src/support.o $(CFLAGS)
../src/logics.o: ../src/logics.c
	$(CC) -c ../src/logics.c -o ../src/logics.o $(CFLAGS)
---------------------------------------------------------------------------------------------------
Qulcuno mi sa aiutare e dirmi dove sto sbagliando?
Grazie in anticipo.

(Gkk)
Ho dato un occhio al sito e mi sembra che le librerie siano
distribuite in formato .lib (per VC e Borland) e non .a (DevC++
basato si Mingw32), quindi non puoi linkare. Dovresti ricompilare
per DevC tutti i binari.

Mi è stata suggerita una soluzione che si è rivelata efficace:
è bastato aggiungere alla linea di comando del linker:
-lCORE_RL_wand_ -lCORE_RL_magick_        (senza estensioni)
che si riferiscono alle librerie:
CORE_RL_wand_.lib
CORE_RL_magick_.lib
e tutto funziona.
Grazie a tutti.