Ecco il mio problema:libav errore durante il collegamento: riferimenti undefined
- Ho costruito ffmpeg dalla sorgente (versione 1.2), il libav * librerie sono in// lib usr local/e sono statici
- I sto compilando un modulo ns3 (www.nsnam.org), quindi il mio unico controllo sul linker è tramite la variabile env LINKFLAGS
- Nella sorgente le intestazioni sono in un blocco "extern C", quindi non è il solito g ++ nome mangling
- Ho impostato LINKFLAGS = "- I/usr/local/include/libavformat -I/usr/local/include/libavcodec -I/usr/local/include/l ibavutil -L/usr/local/lib -lavformat -lavcodec -lavutil ", e il linker non sembra trovare nessuna delle funzioni di libav * che chiamo (ho un sacco di" riferimento non definito "e quindi" collect2: error : ld ha restituito lo stato 1 "
Qualcuno può aiutarmi? Grazie ...
edit: qui ci sono alcuni dei messaggi di riferimento indefiniti:
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_guess_format'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_read_frame'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avformat_write_header'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_interleaved_write_frame'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_find_stream_info'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_register_all'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_init_packet'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avformat_alloc_context'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_dump_format'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avio_close'
Edit2: qui è il messaggio che ottengo dopo "generazione non riuscita":
-> task in 'scratch-simulator' failed (exit status 1):
{task 53952272: cxxprogram scratch-simulator.cc.1.o -> scratch-simulator}
['/usr/bin/g++', '-I/usr/local/include/libavcodec', '-I/usr/local/include/libavformat/',
'-I/usr/local/include/libavutil/', '-L/usr/local/lib', '-I/usr/local
/include/libavcodec', '-I/usr/local/include/libavformat/', '-I/usr/local/include
/libavutil/', '-L/usr/local/lib', '-pthread', '-pthread', '-Wl,-z,relro',
'scratch/scratch-simulator.cc.1.o', '-o', '/home/fede/Thesis/ns-allinone-3.14.1
/ns-3.14.1/build/scratch/scratch-simulator', '-Wl,-Bstatic', '-Wl,-Bdynamic',
'-Wl,--no-as-needed', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L/usr/lib', '-lns3.14.1-test-debug', '-lns3.14.1-
csma-layout-debug', '-lns3.14.1-point-to-point-layout-debug', '-lns3.14.1-netanim-
debug', '-lns3.14.1-lte-debug', '-lns3.14.1-spectrum-debug', '-lns3.14.1-antenna-
debug', '-lns3.14.1-aodv-debug', '-lns3.14.1-dsdv-debug', '-lns3.14.1-dsr-debug',
'-lns3.14.1-mesh-debug', '-lns3.14.1-olsr-debug', '-lns3.14.1-csma-debug', '-lns3.14.1-
wimax-debug', '-lns3.14.1-applications-debug', '-lns3.14.1-virtual-net-device-debug',
'-lns3.14.1-uan-debug', '-lns3.14.1-energy-debug', '-lns3.14.1-flow-monitor-debug',
'-lns3.14.1-nix-vector-routing-debug', '-lns3.14.1-tap-bridge-debug', '-lns3.14.1-
visualizer-debug', '-lns3.14.1-internet-debug', '-lns3.14.1-bridge-debug', '-lns3.14.1-
point-to-point-debug', '-lns3.14.1-mpi-debug', '-lns3.14.1-wifi-debug', '-lns3.14.1-
buildings-debug', '-lns3.14.1-propagation-debug', '-lns3.14.1-mobility-debug',
'-lns3.14.1-config-store-debug', '-lns3.14.1-tools-debug', '-lns3.14.1-stats-debug',
'-lns3.14.1-emu-debug', '-lns3.14.1-topology-read-debug', '-lns3.14.1-network-debug',
'-lns3.14.1-qoe-monitor-debug', '-lns3.14.1-core-debug', '-lrt', '-lgsl',
'-lgslcblas', '-lm', '-ldl', '-lgtk-x11-2.0', '-lgdk-x11-2.0', '-latk-1.0',
'-lgio-2.0', '-lpangoft2-1.0', '-lpangocairo-1.0', '-lgdk_pixbuf-2.0', '-lcairo',
'-lpango-1.0', '-lfreetype', '-lfontconfig', '-lgobject-2.0', '-lglib-2.0', '-lxml2',
'-lpython2.7']
Quali sono alcuni dei riferimenti indefiniti? Puoi verificare che vivano nella libav * .a? Inoltre, i flag '-I' sono applicabili al tempo di compilazione; puoi lasciarli fuori dalla variabile LINKFLAGS. Un'altra idea: verifica che il linker stia onorando LINKFLAG inserendo qualcosa di fasullo come "-lblahblah". A meno che tu non abbia davvero un libblahblah.a sul tuo sistema, il linker dovrebbe lamentarsi che non riesce a trovare la libreria. –
Il linker si lamenta se aggiungo una libreria fasulla in LINKFLAGS. Quando ho chiamato nm mux.o (mux.c è il file sorgente alcune delle funzioni che chiamo sono in), ottengo funzioni con il flag T e funziona con il flag U, ma entrambi i tipi sono "riferimenti non definiti". Ad esempio, avformat_write_header appare con un T e av_guess_format appare con una U, ma ottengo sia un "riferimento non definito a avformat_write_header" che un "riferimento non definito a av_guess_format" – Fedech
Grazie per aver fornito più dati-- solo facendo due diligence per ottenere un sentirsi per il proprio ambiente. Quando si esegue 'nm /usr/local/lib/libavformat.a | grep avformat_write_header ', la funzione appare lì con una' T 'e un indirizzo? Questa è la libreria in cui dovrebbe essere pubblicata (e la funzione viene visualizzata nella mia copia locale). –