Hallo,
Ik probeer tevergeefs de demo applicatie die het gebruik van libavcodec uit ffmpeg demonstreert te compileren. (Zie hier: http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html )
Ik heb de laatste code uit de subversion van ffmpeg gehaald, en deze compileert zonder problemen.
De bovenstaande code compileert mits enkele kleine updates ook zonder problemen.
Bij het linken gaat het echter fout:
De .a files heb ik zelf gecompileerd zonder enig probleem.
Ik heb ook al geprobeerd om ffmpeg te apt-getten en dan de .so files van die package mee te linken, met hetzelfde resultaat.
Dus:
Nochtans zit bv. de methode av_register_all zeker in libavformat.a .
Als ik het goed heb bewijst het volgende dit:
Ik snap niet wat er fout gaat ...
De errors die ik krijgen geven de indruk dat de libraries helemaal niet meegelinkt worden, maar ik geef ze nochtans correct op aan het gcc commando toch?
Iemand enig idee?
Ik probeer tevergeefs de demo applicatie die het gebruik van libavcodec uit ffmpeg demonstreert te compileren. (Zie hier: http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html )
Ik heb de laatste code uit de subversion van ffmpeg gehaald, en deze compileert zonder problemen.
De bovenstaande code compileert mits enkele kleine updates ook zonder problemen.
Bij het linken gaat het echter fout:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| debian:~/decoder# g++ -v decoder.o libavcodec.a libavformat.a libavutil.a Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --with-tune=i686 --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) /usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib decoder.o libavcodec.a libavformat.a libavutil.a -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crtn.o decoder.o: In function `main': decoder.cpp:(.text+0xfa): undefined reference to `av_register_all()' decoder.cpp:(.text+0x12c): undefined reference to `av_open_input_file(AVFormatContext**, char const*, AVInputFormat*, int, AVFormatParameters*)' decoder.cpp:(.text+0x14c): undefined reference to `av_find_stream_info(AVFormatContext*)' decoder.cpp:(.text+0x189): undefined reference to `dump_format(AVFormatContext*, int, char const*, int)' decoder.cpp:(.text+0x1fb): undefined reference to `avcodec_find_decoder(CodecID)' decoder.cpp:(.text+0x222): undefined reference to `avcodec_open(AVCodecContext*, AVCodec*)' decoder.cpp:(.text+0x23a): undefined reference to `avcodec_alloc_frame()' decoder.cpp:(.text+0x242): undefined reference to `avcodec_alloc_frame()' decoder.cpp:(.text+0x277): undefined reference to `avpicture_get_size(int, int, int)' decoder.cpp:(.text+0x2b6): undefined reference to `avpicture_fill(AVPicture*, unsigned char*, int, int, int)' decoder.cpp:(.text+0x2f5): undefined reference to `avcodec_decode_video(AVCodecContext*, AVFrame*, int*, unsigned char*, int)' decoder.cpp:(.text+0x334): undefined reference to `img_convert(AVPicture*, int, AVPicture const*, int, int, int)' decoder.cpp:(.text+0x382): undefined reference to `av_read_frame(AVFormatContext*, AVPacket*)' decoder.cpp:(.text+0x3ab): undefined reference to `av_free(void*)' decoder.cpp:(.text+0x3b6): undefined reference to `av_free(void*)' decoder.cpp:(.text+0x3c1): undefined reference to `avcodec_close(AVCodecContext*)' decoder.cpp:(.text+0x3cc): undefined reference to `av_close_input_file(AVFormatContext*)' collect2: ld returned 1 exit status |
De .a files heb ik zelf gecompileerd zonder enig probleem.
Ik heb ook al geprobeerd om ffmpeg te apt-getten en dan de .so files van die package mee te linken, met hetzelfde resultaat.
Dus:
code:
1
2
3
| g++ decoder.o -lavcodec -lavformat -lavutil -L/root/decoder g++ decoder.o /usr/lib/libavcodec.so.0d /usr/lib/libavutil.so.0d /usr/lib/libavformat.so.0d => zelfde resultaat als hierboven |
Nochtans zit bv. de methode av_register_all zeker in libavformat.a .
Als ik het goed heb bewijst het volgende dit:
code:
1
2
| debian:~/decoder# nm libavformat.a | grep av_register_all 00000000 T av_register_all |
Ik snap niet wat er fout gaat ...
De errors die ik krijgen geven de indruk dat de libraries helemaal niet meegelinkt worden, maar ik geef ze nochtans correct op aan het gcc commando toch?
Iemand enig idee?
[ Voor 15% gewijzigd door DieterVDW op 27-11-2007 14:30 ]