View Full Version : [C] aiuto! non riesco ad installare una libreria su Dev-Cpp!
Salve a tutti,
ho da poco iniziato a programmare e avevo in mente un programma veloce che mi indicizzasse tutti gli hard disk del computer alla ricerca di file mp3 e salvasse su un file di testo tutti i relativi file mp3 leggendo artista e titolo del brano da tag ID3. Ho cercato in internet ed ho trovato una libreria per utilizzare le funzionalità degli ID3 su C, però non so da dove partire per installarla sul mio Dev-Cpp... :mc:
installando solo gli include naturalmente non funziona, e volevo chiedervi una mano per l'installazione, perchè sul file INSTALL che c'è dentro l'archivio è spiegato ma io non ho dimestichezza con i "make" o i "configure" e non ho proprio capito come fare :doh: ...io uso il Dev-Cpp su Windows XP.
Un'altra cosa: come posso realizzare la parte relativa agli hard disk del programma? Conosco alcune funzioni su dos.h come _getdiskfree ma non saprei proprio come far capire al programma quanti hard disk ci sono in un computer e come ciclarmi lo scanning delle cartelle e sottocartelle...avete qualche idea?
Ringrazio anticipatamente! :D
i link per scaricare le librerie sono
1. http://heanet.dl.sourceforge.net/sourceforge/id3lib/id3lib-3.8.3.tar.gz (platform independent)
2. http://ovh.dl.sourceforge.net/sourceforge/id3lib/id3lib-3.8.3binaries.zip win32 (neanche questo so come utilizzarlo su Dev-Cpp)
Purtroppo devi proprio fare così...
Scarica questo: http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?download
E questo: http://prdownloads.sourceforge.net/mingw/MSYS-1.0.10.exe?download
Installa il tutto e ti troverai una shell in stile unix... Tramite quella shell posizionati nella dir interessata (va anche impostata la directory dove hai installato il gcc, che è dentro Dev-C++, ma non mi ricordo come si fa)... Esegui:
./configure
make
E ti dovrebbe create un file chiamato libid3.a, questo file lo devi linkare al tuo progetto tramite le opzioni del linker di Dev-C++...
Per usare le funzioni della libreria devi anche includere il giusto .h nel sorgente dove vuoi usare quelle funzioni...
Ok, sto scaricando, sto mettendo sotto torchio il povero 56k...ci vorrà un pò... :)
Ascolta, installo i file dopodichè avrò a che fare con una shell di comando stile "cmd" di windows? E lì poi scrivo subito ./configure e fa tutto lui?
Mi dispiace ma questa cosa non l'ho davvero mai mai fatta e non so proprio da dove partire!!
Grazie x l'aiuto! :D
Se hai tutte le librerie adatte farà tutto lui...
Poi devi lanciare make...
Ho provato, ecco cosa mi esce con MSYS:
aa@PORT /c/id3lib/
$ ./configure --prefix=c:/Dev-Cpp/
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets ${MAKE}... yes
checking for style of include used by make... GNU
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
Credo sia l'errore di cui parlavi tu...non riesce a trovare il gcc. Dovrei cambiare $PATH ma non riesco a capire come...
Metti la directory dove c'è gcc.exe (C:\Dev-Cpp\bin) nella variabile PATH di Windows: Proprietà su Risorse del Computer -> Avanzate -> Variabili d'ambiente: aggiungi C:\Dev-Cpp\bin alla variabile path del tuo utente...
Ok, fatto, adesso il configure funziona.
Però macina un pò e ad un certo punto mi arriva qui:
.....
.....
checking iomanip presence... yes
checking for iomanip... yes
checking vector usability... yes
checking vector presence... yes
checking for vector... yes
checking string usability... yes
checking string presence... yes
checking for string... yes
checking iomanip.h usability... yes
checking iomanip.h presence... yes
checking for iomanip.h... yes
checking whether C++ has bool... yes
checking whether C++ has correct scoping in for-loops... yes
checking what warning flags to pass to the C++ compiler... -Wall -Wno-unused -Wno-inline -Woverloaded-virtual -Wmissing-declarations
checking what language compliance flags to pass to the C++ compiler...
checking for getopt_long... yes
checking for mkstemp... no
checking for truncate... no
configure: error: Missing a vital function for id3lib
Dato che mi ha detto "missing a vital function" ho provato a scaricare anche le versioni precedenti di id3lib per provare a fare anche su quelle il configure, ma non va...mi da lo stesso errore...
Altre idee?
Grazie x l'aiuto che mi hai dato finora! :D
DanieleC88
07-09-2005, 10:47
Significa che manca una funzione importante per questa id3lib. Al momento non so quale sia, ma comunque, se stai usando Cygwin (credo di aver capito bene), senza spostarti dalla cartella da cui hai lanciato ./configure, digita usa "less config.log" per leggere l'output completo di ./configure. Dovresti trovare ad un certo punto la scritta "missing a vital function" et cetera, seguita dall'output che ha generato l'errore. Probabilmente si tratta di una funzione mancante in una libreria dalla quale id3lib dipende direttamente.
Suppongo sia questa: checking for truncate... no
DanieleC88
07-09-2005, 11:17
Suppongo sia questa: checking for truncate... no
Si, ma di che libreria si può trattare? :confused:
EDIT: forse è questa?
- http://linux.about.com/library/cmd/blcmdl2_truncate.htm
- http://www.linuxinfor.com/english/man2/truncate.html
- http://docs.linux.cz/programming/c/www.gnu.org/software/libc/manual/html_node/File-Size.html
Mi sa che ti devi installare libc (o glibc).
E' quella... Non sta usando Cygwin, ma MingW MSYS...
Per la truncate, la puoi implementare in questo modo:
#include <io.h>
#define truncate(F,S,P) _chsize(F,S)
Lo devi mettere in tutti i file .c o .cpp che usano la truncate...oppure lo metti nel .h che tutti i .c o .cpp usano...
E' quella... Non sta usando Cygwin, ma MingW MSYS...
Per la truncate, la puoi implementare in questo modo:
#include <io.h>
#define truncate(F,S,P) _chsize(F,S)
Lo devi mettere in tutti i file .c o .cpp che usano la truncate...oppure lo metti nel .h che tutti i .c o .cpp usano...
ok, allora vado subito a vedere quali file utilizzano la truncate e ci inserisco il codice che mi hai scritto. Vi faccio sapere più tardi...grazie x ora! :D
Niente da fare, ho provato a mettere tutto nel file id3.h, ho provato a metterlo in ogni singolo include e mi dà lo stesso errore...
stavolta mi sono salvato il log così potete dargli un'occhiata voi, ad un certo punto richiama le funzioni mkstemp e truncate e non va più avanti...
ho messo il log in allegato
Azzz...scusa... Bisogna modificare anche configure.in per non richiedere più la truncate...
Aspetta guardo come fare...
Devi modificare il configure.in qui:
AC_CHECK_FUNCS(
truncate \
,,AC_MSG_ERROR([Missing a vital function for id3lib])
)
Devi commentare queste 4 linee con #...
Dopo devi richiamare autoconf per generare il configure...
Il problema è che mi da un errore a questo punto...e sinceramente nons aprei da quale parte rifarmi...
./config.status: line 399: syntax error near unexpected token `\"'
./config.status: line 399: ` "\" ) CONFIG_FILES="$CONFIG_FILES \" ;;'
Non sono un esperto di autoconf :(
Devi modificare il configure.in qui:
AC_CHECK_FUNCS(
truncate \
,,AC_MSG_ERROR([Missing a vital function for id3lib])
)
Devi commentare queste 4 linee con #...
Dopo devi richiamare autoconf per generare il configure...
Il problema è che mi da un errore a questo punto...e sinceramente nons aprei da quale parte rifarmi...
./config.status: line 399: syntax error near unexpected token `\"'
./config.status: line 399: ` "\" ) CONFIG_FILES="$CONFIG_FILES \" ;;'
Non sono un esperto di autoconf :(
...praticamente devo "ricompilare" il configure.in con autoconf dopo che l'ho editato?
In pratica sì...ma quando lo vai a rilanciare da quell'errore verso la fine...
alla fine ho cercato un'altra libreria x i tag ID3 e ne ho trovata una più leggera che si chiama mplib.
Configure fatto bene, fatto bene anche il make, fatto il make install con questo log:
/*
aa@PORT /c/mplib
$ make install
Making install in src
make[1]: Entering directory `/c/mplib/src'
make[2]: Entering directory `/c/mplib/src'
test -z "c:/Dev-Cpp/lib" || mkdir -p -- "c:/Dev-Cpp/lib"
/bin/sh ../libtool --mode=install /bin/install -c 'libmp.la' 'c:/Dev-Cpp/lib/libmp.la'
/bin/install -c .libs/libmp.lai c:/Dev-Cpp/lib/libmp.la
/bin/install -c .libs/libmp.a c:/Dev-Cpp/lib/libmp.a
ranlib c:/Dev-Cpp/lib/libmp.a
chmod 644 c:/Dev-Cpp/lib/libmp.a
----------------------------------------------------------------------
Libraries have been installed in:
c:/Dev-Cpp/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-LLIBDIR' linker flag
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
test -z "c:/Dev-Cpp/include" || mkdir -p -- "c:/Dev-Cpp/include"
/bin/install -c -m 644 'mplib.h' 'c:/Dev-Cpp/include/mplib.h'
make[2]: Leaving directory `/c/mplib/src'
make[1]: Leaving directory `/c/mplib/src'
make[1]: Entering directory `/c/mplib'
make[2]: Entering directory `/c/mplib'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/c/mplib'
make[1]: Leaving directory `/c/mplib'
*/
ma quando vado a compilare un programma che usa mplib.h mi diceva " [Linker error] undefined reference to `mp_get_tag_list_from_file' " allora vedendo il log del make install ho letto che bisogna aggiungere da qualche parte il flag -LLIBDIR e cose del genere...ho provato, sembra compilare bene in quanto mi dice "no errors found" poi quando provo a far girare il programma mi dice "file non compilato"...come è possibile? Dove devo andare ad inserire quei flag di cui parla il log del make install?
Devi linkare libmp.a al tuo progetto...
Opzioni Progetto -> Parametri -> Linker...aggiungi -llibmp
grandioso, ora va a meraviglia! :D
Il problema era che non sono abituato a creare progetti ma solo singoli file sorgenti...quindi non sapevo proprio cosa fare x linkare la libreria!
Grazie mille per tutti i tuoi aiuti!!! :D Ora posso finire il mio programmino :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.