Libav linking error: undefined references-Collection of common programming errors
FedechHere’s my problem:
- I built ffmpeg from source (version 1.2), the libav* libraries are in /usr/local/lib and they’re static
- I’m compiling a ns3 (www.nsnam.org) module, so my only control over the linker is through the env variable LINKFLAGS
- In the source the headers are in a “extern C” block, so it’s not the usual g++ name mangling
- I set LINKFLAGS=”-I/usr/local/include/libavformat -I/usr/local/include/libavcodec -I/usr/local/include/libavutil -L/usr/local/lib -lavformat -lavcodec -lavutil”, and the linker can’t seem to find any of the libav* functions I call (I get a lot of “undefined reference” and then “collect2: error: ld returned status 1”
Can anyone help me? Thanks…
edit: here are a few of the undefined reference messages:
./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: here is the message I get after “build failed”:
-> 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']
Multimedia MikeThanks for posting the output of the build system. As an aside, what build system is that? Is it Scons?
I studied that build output (I assume that all the individual elements in the array or concatenated into a string and executed). I’m not seeing
-lavformatanywhere. I did a cmd-f search within my browser in order to confirm this. Why doesn’t it show up? Are you sure that all the contents of LINKFLAGS is making it into that output?
Jason CThe libraries are C. The library headers don’t include an extern “C” when compiled as C++. Do this in your C++ source:
extern "C" { #include #include }Or, more generically, for mixed C and C++ source:
#ifdef __cplusplus extern "C" { #endif #include #include #ifdef __cplusplus } #endifAnd you should be fine.