ffmpeg, g++, cygwin und eine "undefined reference"
-
Hallo zusammen,
ich möchte mich ein wenig in ffmpeg einarbeiten und habe mich zu diesem Zweck an das auf ffmpeg.org verlinkte Tutorial (http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html) gewagt. Das ganze mit cygwin und g++ unter Windows. Ffmpeg ist kompiliert und installiert, die Cpp-Datei aus dem Tutorial (avcodec_sample.cpp) habe ich wie folgt kompiliert:
g++ -o avcodec_sample.exe -Wall -lavutil -lavcodec -lavformat -lswscale -lz -lm avcodec_sample.cppFolgender Fehler tritt dann auf (nicht nur zweimal, aber das soll jetzt mal genügen):
/cygdrive/c/WINNT/.../Temp/ccT8J4Yf.o:avcodec_sample.cpp:(.text+0x50): undefined reference to `avcodec_decode_video(AVCodecContext*, AVFrame*, int*, unsigned char const*, int)' /cygdrive/c/WINNT/.../Temp/ccT8J4Yf.o:avcodec_sample.cpp:(.text+0xc9): undefined reference to `av_read_packet(AVFormatContext*, AVPacket*)' ...Das sind die Includes der Cpp-Datei:
#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> #include <stdio.h> #include <stdlib.h>Und schließlich noch mein
/usr/local-Verzeichnis:+---bin +---etc +---include | +---libavcodec | | avcodec.h | | opt.h | | vdpau.h | | | +---libavdevice | | avdevice.h | | | +---libavformat | | avformat.h | | avio.h | | rtsp.h | | rtspcodes.h | | | +---libavutil | | adler32.h | | avstring.h | | avutil.h | | base64.h | | common.h | | crc.h | | fifo.h | | intfloat_readwrite.h | | log.h | | lzo.h | | mathematics.h | | md5.h | | mem.h | | random.h | | rational.h | | sha1.h | | | \---libswscale | swscale.h | \---lib | libavcodec.a | libavdevice.a | libavformat.a | libavutil.a | libswscale.a | \---pkgconfig libavcodec.pc libavdevice.pc libavformat.pc libavutil.pc libswscale.pcEigentlich müssten alle benötigten Libraries da sein. Den Library-Pfad mit -L händisch zu setzen habe ich auch schon probiert, hat aber nichts geändert. Auch das Ändern der Reihenfolge der Linkerdirektiven hat keine Auswirkungen. Ich hoffe, das waren jetzt nicht zu viele Informationen auf einmal und bin dankbar für jeden Hinweis.
-
was ist denn dein ziel
was willst du denn mit ffmeg machen
-
Bei allem Respekt, aber ich denke, das würde jetzt den Rahmen sprengen und die Diskussion weg von dem eigentlichen Thema führen. Im Augenblick möchte ich das Linker-Problem lösen und nicht darüber diskutieren, was mein Programm können soll oder warum ich ffmpeg gewählt habe.
-
Könnte es sein, dass die libraries ein C signature haben und der linker eine C++ funktion sucht?
Sprich wurden die Header über
extern "C" {
#unclude <avcodec.h>
}eingebunden?
/c