Portál AbcLinuxu, 10. května 2025 22:47
Dobrý den,
chtěl bych se zeptat, jestli nemáte někdo zkušenosti s kompilací FFMPEG knihovny?
V mobilní aplikaci využíváme tuto knihovnu, ale bohužel máme problém s Androidem 5.0.
Dostaneme tento error: "error: only position independent executables (PIE) are supported."
Takže knihovna kterou využíváme nemá tyto flagy: "-fPIE -pie".
Zkoušel jsem stáhnout zkompilovanou knihovnu z:
https://github.com/guardianproject/android-ffmpeg-java a z https://github.com/hiteshsondhi88/ffmpeg-android (omlouvám se, nejdou mi vložit linky)
ale tato knihovna zase nemá zapnutý libmp3lame encoder (parametr --enable-libmp3lame).
Bohužel se nám tu knihovnu po mnoha útrapách nedaří zkompilovat.
Byl by někdo ochotný provést kompilaci této knihovny jak s parametry "-fPIE -pie", tak i s "--enable-libmp3lame". Klidně i za finanční odměnu!
Děkuji za každou radu!
Ten člověk zkoušel tento fork: https://github.com/guofengzh/ffmpeg-android/tree/feature/feature-libmp3 a ten mu nešel. Můžeš to zkusit ty? Klidně ať to obsahuje další knihovny, ať se to zbytečně nekomplikuje.
objdump -T ffmpeg | grep log2
), takže ak to stále píše tú chybu, problém nie je ten program (možno sa stále používa tá api-19 verzia).
git clone https://github.com/guofengzh/ffmpeg-android.git cd ./ffmpeg-android git config --file=.gitmodules submodule.libvpx.url https://chromium.googlesource.com/webm/libvpx git submodule sync git submodule update --initPotom už len stačí nastaviť architektúru v súbore settings.sh do premennej SUPPORTED_ARCHITECTURES (podporované sú architektúry armeabi, armeabi-v7a, armeabi-v7a-neon a x86). Tých architektúr tam môže byť aj viac, postupne sa skompilujú všetky (pri testovaní by som tam ale mal len jednu, skompiluje sa to tak rýchlejšie). V tom súbore settings.sh sa tiež nastavuje Android ABI. Keď je všetko nastavené, stačí spustiť ./android_build.sh a všetko sa to skompiluje.
sudo apt-get --quiet --yes install build-essential git autoconf libtool pkg-config gperf gettext yasm
Je možné, že je problém v tom? Jinak jsem do CFLAGS a LDFLAGS přidal -fPIC a odstranil -pie. Změnil --disable-shared na --enable-shared. Využívám tedy master repozitář https://github.com/guofengzh/ffmpeg-android/tree/master . Všechny Vámi popsané příkazy prošli korektně.
./init_update_libs.sh
(pred samotnou kompiláciou).
#!/bin/bash . abi_settings.sh $1 $2 $3 pushd libvpx make clean case $1 in armeabi | armeabi-v7a | armeabi-v7a-neon) TARGET=armv7-android-gcc ;; x86) TARGET=x86-android-gcc ;; esac ./configure \ --target="$TARGET" \ --disable-examples \ --sdk-path=${ANDROID_NDK} \ --disable-runtime-cpu-detect \ --prefix="${TOOLCHAIN_PREFIX}" || exit 1 make -j${NUMBER_OF_CORES} install || exit 1 popd(každopádne pre armeabi by sa asi malo použiť armv6, konfiguračný skript pre libvpx ale nepodporuje armv6-android-gcc; pravdepodobne to ali príliš nevadí, keďže takmer vždy sa aj tak kompiluje pre armeabi-v7a)
#!/bin/bash . abi_settings.sh $1 $2 $3 pushd libvpx make clean case $1 in armeabi | armeabi-v7a | armeabi-v7a-neon) TARGET=armv7-android-gcc AS_BIN=auto ;; x86) TARGET=x86-android-gcc AS_BIN=yasm ;; esac ./configure \ --target="$TARGET" \ --as="$AS_BIN" \ --disable-examples \ --sdk-path=${ANDROID_NDK} \ --disable-runtime-cpu-detect \ --prefix="${TOOLCHAIN_PREFIX}" || exit 1 make -j${NUMBER_OF_CORES} install || exit 1 popda v systéme musí byť nainštalovaný yasm
#!/bin/bash . abi_settings.sh $1 $2 $3 pushd libvpx make clean case $1 in armeabi | armeabi-v7a | armeabi-v7a-neon) TARGET=armv7-android-gcc AS_BIN=auto ASFLAGS="" ;; x86) TARGET=x86-android-gcc AS_BIN=yasm ASFLAGS="-D__ANDROID__" ;; esac ASFLAGS="$ASFLAGS" ./configure \ --target="$TARGET" \ --as="$AS_BIN" \ --disable-examples \ --sdk-path=${ANDROID_NDK} \ --disable-runtime-cpu-detect \ --prefix="${TOOLCHAIN_PREFIX}" || exit 1 make -j${NUMBER_OF_CORES} install || exit 1 popdPS: Ak nie je potrebné, aby ten program podporoval aj vpx, tak stačí zakázať kompilovanie tej knižnice a jej používanie pre ffmpeg (stačí vymazať spúšťanie kompilovania tej knižnici v android_build.sh a, hlavne, treba zmeniť --enable-libvpx na --disable-libvpx v súbore ffmpeg_build.sh).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.