3 Stimmen

g++ Linking-Fehler auf Mac beim Kompilieren von FFMPEG

G++ auf Snow Leopard gibt bei folgendem Code Fehler bei der Verknüpfung aus

test.cpp

#include <iostream>
using namespace std;
#include <libavcodec/avcodec.h>    // required headers
#include <libavformat/avformat.h>
int main(int argc, char**argv) {
    av_register_all();             // offending library call
    return 0;
}

Wenn ich versuche, dies mit folgendem Befehl zu kompilieren

g++ test.cpp -I/usr/local/include -L/usr/local/lib \
-lavcodec -lavformat -lavutil -lz -lm -o test

Ich erhalte die Fehlermeldung Undefinierte Symbole: "av_register_all()", referenziert von: _main in ccUD1ueX.o ld: Symbol(e) nicht gefunden collect2: ld gab 1 Exit-Status zurück

Interessanterweise, wenn ich einen entsprechenden C-Code habe, test.c

#include <stdio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
int main(int argc, char**argv) {
    av_register_all();
    return 0;
}

gcc kompiliert es einwandfrei

gcc test.c -I/usr/local/include -L/usr/local/lib \
-lavcodec -lavformat -lavutil -lz -lm -o test

Ich verwende Mac OS X 10.6.5

$ g++ --version
i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

FFMPEGs libavcodec, libavformat usw. sind C-Bibliotheken und ich habe sie auf meinem Rechner so gebaut:

./configure --enable-gpl --enable-pthreads --enable-shared \
--disable-doc --enable-libx264
make && sudo make install

Wie zu erwarten, enthält libavformat tatsächlich das Symbol av_register_all

$ nm /usr/local/lib/libavformat.a | grep av_register_all
0000000000000000 T _av_register_all
00000000000089b0 S _av_register_all.eh

Ich bin geneigt zu glauben, dass g++ und gcc unterschiedliche Ansichten der Bibliotheken auf meinem Rechner haben. g++ ist nicht in der Lage, die richtigen Bibliotheken zu finden. Irgendein Anhaltspunkt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X