 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[COMPILAZIONE] Come compilare librerie... Clicca QUI per vedere il messaggio nel forum |
DarkGod |
Ciao!
Sto cercando di compilare VLC (VideoLAN) ma ho un problema.
Sto usando il compilatore gcc 3.4.1. e dovrei installare tutte le librerie disponibili.
Purtroppo però acune di esse (credo matroska e eblm) sono state compilate con una vecchia versione di gcc incompatibile con la mia, e questo genera un errore durante l'esecuzione del "make".
Vorrei quindi ricompilare quelle librerie con la mia versione di gcc per eliminare i problemi di incompatibilità... ma come fare?
Non ho mai compilato delle librerie, qualcuno mi potrebbe indicare la strada giusta?
Grazie mille... :D |
khelidan |
Che distro usi?Perche compili?Hai installato il vecchio compilatore?Potresti eventualmente compilare vlc con quello vecchio! |
DarkGod |
Originally posted by khelidan
Che distro usi?Perche compili?Hai installato il vecchio compilatore?Potresti eventualmente compilare vlc con quello vecchio!
Dunque dunque...
Sì, è vero, non sono stato molto chiaro, cmq cercherò di spiegarer tutto.
Ho bisogno di compilarlo perchè poi dovrò modificare i sorgenti.
In realtà però devo compilare VLC sotto Windows (XP), non Linux! :P
Per far ciò sto utilizzando (come raccomandato nella documentazione di VLC) l'ambiente Cygwin, che emula comandi e applicazioni Linux all'interno di Windows.
Ho già provato a usare una versione più vecchia di gcc, e il programma ha compilato... però non funziona correttamente (non posso cambiare interfaccia, non funzionano le opzioni, ecc...)
Non so se i problemi dipendano da quello oppure no, ma in ogni caso devo utilizzare gcc 3.4.4 fornito con Cygwin. Poi se persistono ancora cercherò di risolverli successivamente.
Dato che non ho mai compilato librerie, sto provando a farlo "a intuito" ma finora non ho avuto nessun rusultato, nè trovato documentazione adeguata...
Se avete bisogno di altri dati fatemi sapere...
nel frattempo grazie ancora.... |
DarkGod |
Questi sono gli errori che mi da mentre eseguo il 'make':
code: Info: resolving libebml::EbmlVoid::ClassInfos by linking to __imp___ZN7libebml8EbmlVoid10ClassInfosE (auto-import)
Info: resolving libebml::EbmlHead::ClassInfos by linking to __imp___ZN7libebml8EbmlHead10ClassInfosE (auto-import)
Info: resolving libebml::EbmlHead_Context by linking to __imp___ZN7libebml16EbmlHead_ContextE (auto-import)
Info: resolving vtable for libebml::EbmlDateby linking to __imp___ZTVN7libebml8EbmlDateE (auto-import)
Info: resolving vtable for libebml::EbmlUnicodeStringby linking to __imp___ZTVN7libebml17EbmlUnicodeStringE (auto-import)
Info: resolving vtable for libebml::EbmlElementby linking to __imp___ZTVN7libebml11EbmlElementE (auto-import)
Info: resolving vtable for libebml::EbmlUIntegerby linking to __imp___ZTVN7libebml12EbmlUIntegerE (auto-import)
Info: resolving vtable for libebml::EbmlFloatby linking to __imp___ZTVN7libebml9EbmlFloatE (auto-import)
Info: resolving vtable for libebml::EbmlStringby linking to __imp___ZTVN7libebml10EbmlStringE (auto-import)
Info: resolving __ZTVN7l./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x690e): undefined reference to `libmatroska::KaxClusterSilentTrackNumber::ClassIn
fos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x6b13): undefined reference to `libmatroska::KaxClusterSilentTracks::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0xf243): undefined reference to `libmatroska::KaxSegmentFamily::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x12d1e): undefined reference to `libmatroska::KaxSegmentFamily::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x12f2b): undefined reference to `libmatroska::KaxChapterTranslate::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x13035): undefined reference to `libmatroska::KaxChapterTranslateEditionUID::Class
Infos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x130d1): undefined reference to `libmatroska::KaxChapterTranslateCodec::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x1318c): undefined reference to `libmatroska::KaxChapterTranslateID::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x1346d): undefined reference to `libmatroska::KaxChapterProcessTime::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x134eb): undefined reference to `libmatroska::KaxChapterProcessData::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x142e8): undefined reference to `libmatroska::KaxChapterProcess::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x143b4): undefined reference to `libmatroska::KaxChapterProcessCodecID::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x14454): undefined reference to `libmatroska::KaxChapterProcessPrivate::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x14a15): undefined reference to `libmatroska::KaxChapterProcessCommand::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(.text+0x15569): undefined reference to `libmatroska::KaxEditionFlagOrdered::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska24KaxChapterProcessPrivate7G
enericEv[libmatroska::KaxChapterProcessPrivate::Ge
neric() const]+0x1): undefined reference to `libmatroska::KaxChapterProcessPrivate::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska24KaxChapterProcessPrivatecv
RKN7libebml6EbmlIdEEv[libmatroska::KaxChapterProce
ssPrivate::operator libebml::EbmlId const&() const]+0x1): undefined reference to `libmatroska::KaxChapterProcessPrivate::ClassInfos
'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska21KaxChapterProcessData7Gene
ricEv[libmatroska::KaxChapterProcessData::Generic(
) const]+0x1): undefined reference to `libmatroska::KaxChapterProcessData::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska21KaxChapterProcessDatacvRKN
7libebml6EbmlIdEEv[libmatroska::KaxChapterProcessD
ata::operator libebml::EbmlId const&() const]+0x1): undefined reference to `libmatroska::KaxChapterProcessData::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska16KaxSegmentFamily7GenericEv
[libmatroska::KaxSegmentFamily::Generic() const]+0x1): undefined reference to `libmatroska::KaxSegmentFamily::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska16KaxSegmentFamilycvRKN7libe
bml6EbmlIdEEv[libmatroska::KaxSegmentFamily::opera
tor libebml::EbmlId const&() const]+0x1): undefined reference to `libmatroska::KaxSegmentFamily::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska21KaxChapterTranslateID7Gene
ricEv[libmatroska::KaxChapterTranslateID::Generic(
) const]+0x1): undefined reference to `libmatroska::KaxChapterTranslateID::ClassInfos'
./modules/demux/libmkv.a(libmkv_a-mkv.o):mkv.cpp:(. text$_ZNK11libmatroska21KaxChapterTranslateIDcvRKN
7libebml6EbmlIdEEv[libmatroska::KaxChapterTranslat
eID::operator libebml::EbmlId const&() const]+0x1): undefined reference to `libmatroska::KaxChapterTranslateID::ClassInfos'
/usr/win32/lib/libmatroska.a(KaxInfoData.o):KaxInfoData.cpp:(. text$_ZN7libebml11EbmlElementD2Ev[libebml::EbmlEle
ment::~EbmlElement()]+0x30): undefined reference to `___assert'
/usr/win32/lib/libmatroska.a(KaxCues.o):KaxCues.cpp:(.text+0x26d): undefined reference to `___assert'
/usr/win32/lib/libmatroska.a(KaxCues.o):KaxCues.cpp:(.text+0x39f): undefined reference to `___assert'
/usr/win32/lib/libmatroska.a(KaxCues.o):KaxCues.cpp:(.text+0x4d1): undefined reference to `___assert'
/usr/win32/lib/libmatroska.a(KaxCues.o):KaxCues.cpp:(. text$_ZNK11libmatroska7KaxCues19GlobalTimecodeScal
eEv[libmatroska::KaxCues::GlobalTimecodeScale() const]+0x2c): undefined reference to `___assert'
/usr/win32/lib/libmatroska.a(KaxCuesData.o):KaxCuesData.cpp:(.text+0x1d2): more undefined references to `___assert' follow
ibebml12EbmlSIntegerE by linking to __imp___ZTVN7libebml12EbmlSIntegerE (auto-import)
collect2: ld returned 1 exit status
make[2]: *** [vlc.exe] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
|
Renaulto |
Non puoi compilarti gli rpm? |
DarkGod |
Originally posted by Renaulto
Non puoi compilarti gli rpm?
Non penso.
Il fatto è che è per un progetto di tesi, e dopo averlo compilato devo effettuare delle modifiche al codice sorgente.
Devo proprio ricompilare quelle 2 librerie...
(anche perchè ricordo che in realtà sono sotto Windows XP) |
DarkGod |
Scusate, ma IN GENERALE, per ricompilare delle librerie sotto Linux come si fa? Qual'è il procedimento da seguire?
Io ho scaricato i sorgenti, ho dato il "make" (che credo sia andato a buon fine) e mi ha creato un file.
Ma a questo punto non so come procedere...
Devo spostare quel file nella cartella delle librerie del programma?
E tutti gli header (*.h) ?
O__o |
Viry |
Dopo il make, consiglio un "make install" eseguito da utente root (questo comando installa i file appena compilati) |
LazerPhEa |
e un bel ldconfig. |
DarkGod |
Originally posted by Viry
Dopo il make, consiglio un "make install" eseguito da utente root (questo comando installa i file appena compilati)
Sto provando a compilarle... (sia ebml che matroska).
Il comando "make" mi genera correttamente il file ".a".
Il comando "make install" non funziona, in nessuna delle due librerie, mi dice:
code: make: *** No rule to make target 'install'. Stop.
Ho sostituito i due nuovi file .a alle vecchie versioni, ma non sembra avere avuto alcun effetto... |
DarkGod |
Originally posted by Viry
Dopo il make, consiglio un "make install" eseguito da utente root (questo comando installa i file appena compilati)
Non posso divenatre root, il comando "su" per cambiare utente sembra non essere riconosciuto da Cygwin..
In ogni caso il make genera solo la libreria .a, ma nessn file "install".
Nemmeno "ldconfig" funziona. |
Alf |
Originally posted by DarkGod
Non posso divenatre root, il comando "su" per cambiare utente sembra non essere riconosciuto da Cygwin..
In ogni caso il make genera solo la libreria .a, ma nessn file "install".
Nemmeno "ldconfig" funziona.
Il make install non e' un comando diverso da make.
make puo' avere un "target"
Se esiste il file Makefile all'interno ci sono tutte le "regole" che il make segue per compilare.
Di solito c'e' anche l'etichetta "install" che a seconda dei casi sposta i binari creati, crea link, insomma fa un po' di cose per "installare" quello che hai compilato.
Comunque puoi' personalizzarti il tuo "make" scrivendo quel che vuoi nel Makefile.
Ah spesso c'e' il file configure che prendendo i dati dal sistema ti crea un file Makefile ad hoc
Ma in realta' tutto questo, a parte "cultura" personale, non credo ti serva molto per risolvere il problema :) |
DarkGod |
Originally posted by Alf
Il make install non e' un comando diverso da make.
make puo' avere un "target"
Se esiste il file Makefile all'interno ci sono tutte le "regole" che il make segue per compilare.
Di solito c'e' anche l'etichetta "install" che a seconda dei casi sposta i binari creati, crea link, insomma fa un po' di cose per "installare" quello che hai compilato.
Comunque puoi' personalizzarti il tuo "make" scrivendo quel che vuoi nel Makefile.
Ah spesso c'e' il file configure che prendendo i dati dal sistema ti crea un file Makefile ad hoc
Ma in realta' tutto questo, a parte "cultura" personale, non credo ti serva molto per risolvere il problema :)
Sì, ok... questo lo sapevo ;):P
Il fatto è che, nei sorgenti delle librerie che ho scaricato, non c'è nessun configure e nessun install, ma solo un Makefile.
Quindi l'unica cosa che posso fare è lanciare il make (senza install) che mi compila i sorgetti .cpp e mi crea la libreria .a .
E fin qui ci sono.
Ma per utilizzare queste librerie al posto di quelle che avevo già incluse (e che non vanno bene perchè sono state compilate con una versione vecchia del gcc e g++), come devo fare?
Io ho semplicemente sostuituito i vecchi file .a con quelli nuovi, ma non sembra essere cambiato nulla.... :( |
Alf |
Originally posted by DarkGod
Sì, ok... questo lo sapevo ;):P
Il fatto è che, nei sorgenti delle librerie che ho scaricato, non c'è nessun configure e nessun install, ma solo un Makefile.
Quindi l'unica cosa che posso fare è lanciare il make (senza install) che mi compila i sorgetti .cpp e mi crea la libreria .a .
E fin qui ci sono.
Ma per utilizzare queste librerie al posto di quelle che avevo già incluse (e che non vanno bene perchè sono state compilate con una versione vecchia del gcc e g++), come devo fare?
Io ho semplicemente sostuituito i vecchi file .a con quelli nuovi, ma non sembra essere cambiato nulla.... :(
Cioe' li hai sostituiti e poi hai ricompilato tutto il vlc ? |
DarkGod |
Probabilmente devo compilarle con qualche opzione particolare...... |
DarkGod |
Originally posted by Alf
Cioe' li hai sostituiti e poi hai ricompilato tutto il vlc ?
Esatto.
Ho sostituito i file delle librerie con quelli appena compilati, e poi rifatto da capo ./configure e make per compilare VLC.
Ma l'errore è lo stesso di prima... |
DarkGod |
Le librerie vanno linkate manualmente o ci pensa il Makefile di VLC a linkarle? |
DarkGod |
Originally posted by Walter
Hai usato queste istruzioni per la compilazione di VLC?
http://developers.videolan.org/vlc/...ronmentRevB.pdf
Sì sì...
Ma quella guida è del 2004 e utilizzava il gcc 3.3.3, mentre io devo usare la versione 3.4.4.
(In ogni caso non mi funzionava nemmeno col 3.3.3, ho provato anche quello) |
DeepBlue |
Sì però devi tenere conto che Cygwin è solo un'emulazione del terminale, qualcosa potrebbe anche non funzionare |
DarkGod |
Originally posted by DeepBlue
Sì però devi tenere conto che Cygwin è solo un'emulazione del terminale, qualcosa potrebbe anche non funzionare
Sto proprio cercando di capire cosa non funziona.... |
|
|
|
|