Portál AbcLinuxu, 3. listopadu 2025 18:46
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.
povedlo se Vám tedy program ffmpeg zkompilovat s tou podporou mp3lame? :)
Jen teda ještě jeden problém. Na Androidu 5.0 to funguje, ale na Androidu 4.2 ne. Dostanu tento error:
soinfo_relocate(linker.cpp:975): cannot locate symbol "log2" referenced by "/app_bin/ffmpeg"...CANNOT LINK EXECUTABLE
Trošku jsem Googlil a asi to bude potřeba zkompilovat s menším ANDROID API (15 nebo 16 nejlépe). Můžete to zkusit? Případně zkusit ještě něco vygooglit jestli jsem to našel správně.
(P.S: Nahrál jsem pro srovnání (třeba se bude hodit) na Pastebin původní konfiguraci, která nám funguje na Androidech 4.0 - 4.4, ale ne právě na Androidu 5.0 http://pastebin.com/5N5svnxy )
Mělo by ale stačit tedy to zkompilovat s menším API snad, můžete to ještě zkusit? Mockrát děkuji.
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
popd
a 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
popd
PS: 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.