Pagina 1 di 1

problema di compilazione con le libdvdread

Inviato: lun 25 lug 2005, 15:59
da sir_alex
Raga, ho bisogno di una mano: sto facendo un programma che deve fare un parsing del file ifo di un dvd video per poi restituire il numero di titoli e per ciascun titolo il numero di capitoli; ovviamente uso le libdvdread e per il mio programma prendo spunto dal file title_info.c che c'è come esempio in tale pacchetto; peccato che continui a darmi errori di compilazione! Anzi, di linkaggio. Per includere le librerie bisogna passare a gcc -l/usr/lib?
comunque poi ho anche provato a prendere tutti i sorgenti della libreria e title_info.c e cercare di creare un binario unico (con un semplice makefile), però in fase di linkaggio (dopo che creo tutti i file oggetto regolarmente senza errori di compilazione) mi da 

cc -o info md5.o dvd_udf.o dvd_input.o dvd_reader.o ifo_read.o title_info.o
dvd_input.o(.text+0x354): In function `dvdinput_setup':
: undefined reference to `dlopen'
dvd_input.o(.text+0x374): In function `dvdinput_setup':
: undefined reference to `dlsym'
dvd_input.o(.text+0x38c): In function `dvdinput_setup':
: undefined reference to `dlsym'
dvd_input.o(.text+0x3a4): In function `dvdinput_setup':
: undefined reference to `dlsym'
dvd_input.o(.text+0x3bc): In function `dvdinput_setup':
: undefined reference to `dlsym'
dvd_input.o(.text+0x3d4): In function `dvdinput_setup':
: undefined reference to `dlsym'
dvd_input.o(.text+0x3ec): more undefined references to `dlsym' follow
dvd_input.o(.text+0x43e): In function `dvdinput_setup':
: undefined reference to `dlclose'
dvd_input.o(.text+0x4a3): In function `dvdinput_setup':
: undefined reference to `dlclose'
collect2: ld returned 1 exit status
make: *** [info] Error 1

sono andato a cercare nei file include (in /usr/include) dove fossero le funzioni che non riesce a trovare, ho scoperto che sono nel file dlfcn.h che non era precedentemente incluso in dvd_input.c; l'ho incluso io pensando che così avrebbe trovato le funzioni ma continua a dare lo stesso output. Idee?

Diciamo che io so per certo che, dato il mio file .c, io includo le librerie con

#include <dvdread/dvd_reader.h>
#include <dvdread/ifo_types.h>
#include <dvdread/ifo_read.h>
etc

poi uso le varie funzioni e al gcc scrivo

gcc file.c -o file

a questo dovrei aggiungere -I/usr/include? Se non lo metto lui compila senza errori, quindi presumo non serva; e poi per le librerie? -l/usr/lib? Ma allora

gcc prova.c -l/usr/lib -o prova
/usr/bin/ld: cannot find -l/usr/lib
collect2: ld returned 1 exit status

Grazie!

P.S.: perchè nei corsi di informatica (universitari) ti insegnano ad usare il c ma non c'è pericolo che ti spieghino come compilare progetti con più files sorgente???

P.S.S.: ah, pkg-config non funzia perchè le libdvdread che ho installato da sorgente non hanno alcun file .pc (dato che mi era già  capitato di usare pkg-config una volta con le libxml2, e la compilazione all'epoca era andata liscia alla grande...)

Inviato: lun 25 lug 2005, 16:07
da useless
non -l/usr/lib, bensì -ldvdread!

Inviato: lun 25 lug 2005, 16:34
da sir_alex
Bella! Grazie, ora va tutto! :lol: