problema di compilazione con le libdvdread
Inviato: lun 25 lug 2005, 15:59
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...)
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...)