Newsgroup: it.comp.lang.c
Titolo: DEVCpp  inserire libreria libmysql.a

Salve a tutti,
premesso che è la prima volta che uso devcpp(ver 4.9.9.2), e non ho molta 
esperienza in programmazione, volevo chiedere quanto segue:
Sto scrivendo un programma in C che necessita di un database. Ho scaricato 
da 
devpacks.org
 la libreria " libmysql Library version: 5.0.5 Devpak 
version: 1sid".
Inserisco nelle Progetto>Opzioni di progetto>Parametri: nella textarea di 
Linker:"..\..\..\..\programmi\devcpp\libmysql.a", nella textarea del 
compilatore: " -o prova_mysql.exe"
Dopo aver dato il comando di compilazione questo è quello che c'è scritto 
nel makefile.win.  In particolare questa riga, mi viene segnalata in rosso
prova_mysql.o: prova_mysql.c C:/Programmi/Dev-Cpp/include/windows.h 
C:/Programmi/Dev-Cpp/include/winsock.h 
C:/Programmi/Dev-Cpp/include/stdio.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql.h 
C:/Programmi/Dev-Cpp/include/sys/types.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_com.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_time.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_version.h 
C:/Programmi/Dev-Cpp/include/mysql/typelib.h 
C:/Programmi/Dev-Cpp/include/mysql/my_list.h 
C:/Programmi/Dev-Cpp/include/mysql/my_alloc.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_com.hg++.exe: prova_mysql.cgi: 
linker input file unused because linking not done
Qui invece c'è tutto il testo del makefile.win
# Project: prova collegamento
# Makefile created by Dev-C++ 4.9.9.2
CPP  = g++.exe
CC   = gcc.exe
WINDRES = windres.exe
RES  = Progetto1_private.res
OBJ  = prova_mysql.o confr.o $(RES)
LINKOBJ  = prova_mysql.o confr.o $(RES)
LIBS =  -L"C:/Programmi/Dev-Cpp/lib" C:/Programmi/Dev-Cpp/lib/libmysql.a
INCS =  -I"C:/Programmi/Dev-Cpp/include"
CXXINCS 
  -I"C:/Programmi/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Programmi/Dev-Cpp/include/c++/3.4.2/backward" 
  -I"C:/Programmi/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Programmi/Dev-Cpp/include/c++/3.4.2" 
  -I"C:/Programmi/Dev-Cpp/include"
BIN  = Progetto1.exe
CXXFLAGS = $(CXXINCS)   -ansi -traditional-cpp
CFLAGS = $(INCS) prova_mysql.cgi   -ansi -traditional-cpp
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before Progetto1.exe all-after
clean: clean-custom
 ${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
 $(CC) $(LINKOBJ) -o "Progetto1.exe" $(LIBS)
prova_mysql.o: prova_mysql.c C:/Programmi/Dev-Cpp/include/windows.h 
C:/Programmi/Dev-Cpp/include/winsock.h 
C:/Programmi/Dev-Cpp/include/stdio.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql.h 
C:/Programmi/Dev-Cpp/include/sys/types.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_com.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_time.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_version.h 
C:/Programmi/Dev-Cpp/include/mysql/typelib.h 
C:/Programmi/Dev-Cpp/include/mysql/my_list.h 
C:/Programmi/Dev-Cpp/include/mysql/my_alloc.h 
C:/Programmi/Dev-Cpp/include/mysql/mysql_com.hg++.exe: prova_mysql.cgi: 
linker input file unused because linking not done
 $(CC) -c prova_mysql.c -o prova_mysql.o $(CFLAGS)
il risultato  della compilazione è:
[build error] ***multiple target patterns-
Non capisco dove sbaglio, ed avrei biogno di un aiuto per continuare.
Grazie
fratlaf 

 CFLAGS = $(INCS) prova_mysql.cgi   -ansi -traditional-cpp
Perché ci hai messo "prova_mysql.cgi"?
E.

 ha scritto nel messaggio 
news:vHgBl.11452$VA5....@tornado.fastwebnet.it...

In realtà il mio progetto è quello di scrivere un cgi. Sono neofita anche in 
quello. Cmq, ho messo prova_mysql.cgi, perchè quella è stata l'ultima prova 
che ieri sera ho fatto, dopo aver "sperimentato " dalle 4 del 
pomeriggio...ero un po cotto, e non mi sono accorto che compilavo su ".cgi". 
Cmq la storia non cambia anche se uso "prova_mysql.exe".
Non so come andare avanti. Sono fermo a questo punto ormai da 2 giorni.... 
Qualcuno mi può dare una mano? Vi ringrazio tanto
Fratlaf 

 Cmq la storia non cambia anche se uso "prova_mysql.exe".
Nei CFLAGS non ci devi mettere il nome dell'eseguibile, secondo me. Vedi 
che l'errore si riferisce proprio a quello. Prova a toglierlo e riporta 
nuovamente l'errore che viene generato.
E.

 E.
Grazie per il suggerimento, togliendo "prova_mysql.exe" dalla text area del 
compilatore effettivamente effettivamente comincia la compilazione. Vengono 
generati altri errori su windows.h. Comincerò ad utilizzare dev-cpp piano 
piano... Alla fine mi sono stufato, e sono tornato al buon vecchio gcc.
Allora: 1) Ho scaricato la versione essential per windows di mysql 5.0.
2) Ho aggiunto alla variabile di sistema PATH PATH=C:\dev-cpp\bin (tasto dx 
del mouse su: risorse del computer>proprietà>avanzate>variabili d'ambiente, 
selezionato path e poi modificato)
3)Ho copiato la DLL: libmySQL.dll in C:\dev-cpp\bin
4) Ho scaricato dal sito: 
http://www.emmestech.com/software/pexports-0.43/download_pexports.html
, il 
programma pexports e l'ho copiato nella cartella C:\dev-cpp\bin
5) a questo punto:
  C:\dev-cpp\bin> pexports libmysql.dll>libmysql.def
6)C:\dev-cpp\bin>dlltool -d libmysql.def -D libmysql.dll -l libmysql.a e 
successivamente ricopiato libmysql.def e libmysql.a nella cartella lib di 
dev-cpp
7) Ho compilato il file con la seguente riga di comando:
   gcc prova_mysql.c -o prova_mysql. exe -lmysql -lws2_32  (con questi 
comandi sono riuscito ad inserire finalmente la libreria!)
la risposta del compilatore: prova_mysql.c: undefinited reference to 
mysql_init@4.
8)Ho Aperto con notepad libmysql.def, ed ho aggiunto @4 affianco a 
misql_init
9)Ho ripetuto il punto 6, ed il punto 7.
A questo punto, il problema della compilazione è superato! il file viene 
compilato, le librerie vengono linkate. GCC non segnala più nessun errore.
Quando vado ad avviare prova_mysql.exe:
SSSSSSSSSSDDDDANNNNN: Errore di sistema: IMPOSSIBILE TROVARE PUNTO DI 
INGRESSO.
                                               Impossibile trovare il punto 
di ingresso mysql_init@4 della procedura nella libreria di collegamento 
dinamico libmysql.dll
Per essere certo che il sistema si stia riferendo alla dll presente nella 
cartella C:\dev-cpp\bin la rinomino con ".xxx"
SSSSSSSSSSDDDDANNNNN: Errore di sistema: "Impossibile avviare l'applicazione 
specificata. libmysql.dll non è stato trovato. Una nuova installazione 
dell'applicazione potrebbe risolvere il problema"
Quindi sono sicuro che la dll utilizzata, è quella sulla quale ho agito.
Ho spento e riacceso il pc...niente, stesso errore: impossibile trovare 
punto di ingresso. Ho controllato nella documentazione di dlltool,  non ho 
trovato nulla....
Ho provato questo comando, trovato su: 
http://www.openwebspider.org/documentation/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/
                    dlltool -d libmysql.def -D libmysql.dll -l libmysql.dll
SSSSSSSSSSDDDDANNNNN: Errore di sistema: IMMAGINE DANNEGGIATA
                                                      L'applicazione o DLL 
C:\Dev-cpp\libmysql.dll non è un immagine valida di windows. Verificare con 
il dischetto di installazione.
Non so più cosa fare....Aiuto!!!!

 dinamico libmysql.dll
Perché hai modificato la dichiarazione, ma nella libreria il nome della 
funzione è rimasto quello. E non è sensato andare a modificare le librerie.
E.

>dev-cpp
Scrivere:
C:\dev-cpp\bin>dlltool -d libmysql.def -D libmysql.dll -l libmysql.a -k (con 
la kappa!!!= KILL AT )
A questo punto continuare a seguire la procedura elencata prima!
Ciao a Tutti...alla prossima!
Fratlaf