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...)
problema di compilazione con le libdvdread
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

