Ich versuche, eine ffplay-Binärdatei zu erhalten, um sie in meiner Android-App zu verwenden. Aber wenn ich mein Konfigurationsskript ausführe, heißt es, dass sdl2 nicht gefunden wurde, obwohl ich es auch plattformübergreifend kompiliert und seine Header und Bibliotheksflags auf --extra-cflags und --extraldflags gesetzt habe. Wenn ich --enable-sdl2 entferne, erscheint ffplay einfach nicht in der Liste der zu erstellenden Programme. Ich habe es geschafft, es auf dem Zweig release/3.2 zu kompilieren, aber es gibt einen Fehler bezüglich eines undefinierten Verweises auf „main“ in ffplay- oder libavutil.so-Dateien aus (abhängig von gemeinsam genutzten und/oder statischen Flags). Dann habe ich die Variablen sdl2_cflags und sdl2_extralibs in der Konfigurationsdatei auf dem Zweig master bearbeitet, damit sie auf meine Bibliothek verweisen, aber es wird trotzdem nicht kompiliert.
Was mache ich falsch?
Meine Konfigurationsdatei wurde folgendermaßen geändert:
if enabled sdl2; then
sdl2_cflags="-I/home/kondenko/Android/ffmpeg/ffmpeg/sdl2/include -D_REENTRANT"
sdl2_extralibs="-L/home/kondenko/Android/ffmpeg/ffmpeg/sdl2/build/android/obj/local/armeabi-v7a -lSDL2"
enable sdl2
fi
Und hier ist mein Skript:
make_or_die() {
make -j $(nproc) || exit
sudo make install || exit
}
ARCH=arm
API=17
CPU=armv7
WORKING_DIR=~/Android/ffmpeg/ffmpeg
NDK=~/Android/SDK/ndk
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
FFMPEG_PREFIX=$(pwd)/android/$CPU
SDL=$(pwd)/sdl2
SDL_PREFIX=$SDL/build/android/obj/local/armeabi-v7a
export PATH=$PATH:$TOOLCHAIN/bin:$TOOLCHAIN/include
export CC="arm-linux-androideabi-clang"
export CXX="arm-linux-androideabi-clang++"
build_sdl2() {
hg clone https://hg.libsdl.org/SDL $SDL
cd $SDL
sudo ./build-scripts/androidbuildlibs.sh
cd $WORKING_DIR
echo "SDL build folder: $SDL_PREFIX"
}
build_ffmpeg() {
sudo make distclean
sudo ./configure \
--target-os=android \
--arch=$ARCH \
--prefix=$FFMPEG_PREFIX \
--cross-prefix=$CROSS_PREFIX \
--enable-static \
--disable-ffprobe \
--disable-ffmpeg \
--disable-doc \
--disable-symver \
&& make_or_die && header "Success! Your files are at $FFMPEG_PREFIX" \
|| (echo \\n && tail ffbuild/config.log && exit)
}
build_sdl2
build_ffmpeg
Aktualisierung:Ich habe es geschafft, eine ausführbare Datei zu erstellen, indem ich diese Zeilen in die Konfigurationsdatei eingefügt habe, aber weder ffmpeg noch ffplay, die auf diese Weise erstellt wurden, funktionieren. Ihre Prozesse werden mit Code 132 beendet, der meines Wissens mit einer beschädigten Binärdatei zusammenhängt. Ich weiß immer noch nicht, wie ich sie zum Laufen bekomme.
sdl2_cflags="-I/home/kondenko/Android/ffmpeg/ffmpeg/sdl2/include -D_REENTRANT"
sdl2_extralibs="/home/kondenko/Android/ffmpeg/ffmpeg/sdl2/build/android/lib/armeabi-v7a/libSDL2.so /home/kondenko/Android/ffmpeg/ffmpeg/sdl2/build/android/obj/local/armeabi-v7a/libSDL2.a /home/kondenko/Android/ffmpeg/ffmpeg/sdl2/build/android/obj/local/armeabi-v7a/libSDL2main.a -llog -landroid -ldl -lGLESv1_CM -lGLESv2 -shared"
enable sdl2