मैं इस पर जा रहा हूं, सचमुच दिनों के लिए। मैं एंड्रॉइड एप्लिकेशन में उपयोग के लिए libmp3lame के साथ FFmpeg बनाने की कोशिश कर रहा हूं। बिल्ड स्क्रिप्ट एक --sysroot
ध्वज सेट करता है जो एंड्रॉइड एनडीके निर्देशिका को इंगित करता है ताकि इन पुस्तकालयों को इस तरह से बनाया जा सके कि एंड्रॉइड उनका उपयोग कर सके।--sysroot किसी अन्य निर्देशिका पर इंगित करते समय स्थापित पुस्तकालयों का पता लगाने के लिए FFmpeg कैसे प्राप्त कर सकता हूं?
समस्या तब आती है जब मैं --enable-libmp3lame
पर ध्वज जोड़ता हूं; निर्माण शुरू होने के दौरान मुझे ERROR: libmp3lame >= 3.98.3 not found
मिलते हैं। मुझे पता है कि LAME, और इसकी लाइब्रेरी स्थापित हैं, क्योंकि मैं मैन्युअल रूप से ./configure --enable-libmp3lame
चला सकता हूं और कॉन्फ़िगरेशन बिना किसी हिचकिचाहट के लॉन्च करता है, और यह दिखाता है कि इस बिल्ड के लिए libmp3lame सक्षम है। हालांकि, इस तरह की इमारत सिर्फ इसके लिए काम नहीं करेगी, क्योंकि मुझे कुछ काम करने के लिए एंड्रॉइड एनडीके की आवश्यकता है।
मैं तथ्य यह है कि इस बिल्ड स्क्रिप्ट sysroot घोषित किया जाता है, और कुछ शोध के माध्यम से, मैं -Luser/include
, अतिरिक्त CFLAGS को -L/user/include
, और LDFLAGS (जो मैंने पढ़ा है जोड़ने की कोशिश की है करने के लिए नीचे समस्या ट्रैक करने के बाद जीसीसी के लिए डिफ़ॉल्ट खोज स्थान)। मैंने कई अन्य चीजों की भी कोशिश की है, लेकिन मुझे विश्वास है कि यहां कोई व्यक्ति इस विशिष्ट समस्या से मदद कर सकता है। इस पूरी निर्माण स्क्रिप्ट इस प्रकार है:
अतिरिक्त जानकारी:
- बिल्ड ओएस: उबंटू 11.10
- FFmpeg वर: 3.9.x
- एंड्रॉयड NDK: Git
- लंगड़ा वर से नवीनतम: R7
build.sh
#!/bin/bash
if [ "$NDK" = "" ]; then
echo NDK variable not set, assuming ${HOME}/android-ndk
export NDK=${HOME}/android-ndk
fi
SYSROOT=$NDK/platforms/android-3/arch-arm
# Expand the prebuilt/* path into the correct one
TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86`
export PATH=$TOOLCHAIN/bin:$PATH
rm -rf build/ffmpeg
mkdir -p build/ffmpeg
cd ffmpeg
# Don't build any neon version for now
for version in armv5te armv7a; do
DEST=../build/ffmpeg
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm"
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --soname-prefix=/data/data/net.smartnotes/lib/"
FLAGS="$FLAGS --enable-shared --disable-symver"
FLAGS="$FLAGS --enable-small --optimization-flags=-O2"
FLAGS="$FLAGS --disable-everything --enable-protocol=file"
FLAGS="$FLAGS --enable-libmp3lame --enable-encoder=nellymoser"
case "$version" in
neon)
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
# Runtime choosing neon vs non-neon requires
# renamed files
ABI="armeabi-v7a"
;;
armv7a)
# I have tried many things here.
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp"
EXTRA_LDFLAGS=""
ABI="armeabi-v7a"
;;
*)
# I have tried many things here.
EXTRA_CFLAGS="-Luser/include"
EXTRA_LDFLAGS=""
ABI="armeabi"
;;
esac
DEST="$DEST/$ABI"
FLAGS="$FLAGS --prefix=$DEST"
mkdir -p $DEST
echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" > $DEST/info.txt
./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $DEST/configuration.txt
[ $PIPESTATUS == 0 ] || exit 1
make clean
make -j4 || exit 1
make install || exit 1
done
मुझे वास्तव में नहीं पता कि वास्तविक libmp3lame फ़ाइलों को कहां स्थापित किया गया है। मैंने चेक/उपयोगकर्ता/चेक किया था और वहां एक लंगड़ा/lame.h फ़ाइल थी, और मैंने इसे [..] एंड्रॉइड-एनडीके/प्लेटफॉर्म/एंड्रॉइड -3/आर्क-आर्म/उपयोगकर्ता/में शामिल किया/लंगड़ा डीआईआर, हालांकि इससे मदद नहीं मिली है। मुझे नाराज संदेह है कि हेडर फ़ाइल स्वयं ही कटौती करने के लिए पर्याप्त नहीं होगी। मैंने एलएएम हेडर और सी फाइलों से भरे फ़ोल्डर को उपरोक्त डीआईआर में भी कॉपी और पेस्ट करने का प्रयास किया है। –
केवल 1 फ़ाइल या 1 फ़ोल्डर की प्रतिलिपि बनाना बिल्कुल काम नहीं करेगा। आपको निश्चित होना चाहिए कि आपने सही जगहों पर बिल्कुल आवश्यक सभी फाइलों और फ़ोल्डरों की प्रतिलिपि बनाई है। अगर मुझे याद है कि 'इंस्टॉल करें' को कॉपी की गई सभी फाइलों को प्रिंट करना चाहिए, तो आप LAME का पुनर्निर्माण कर सकते हैं और जब 'इंस्टॉल करें' करते हैं तो सभी फ़ाइल नामों और फ़ोल्डरों का ध्यान रखें। – sashoalm
धन्यवाद, मैंने इसे LAME स्रोत डाउनलोड करके किया, और इसे एक डीआईआर में निकाला। जब मैंने 'कॉन्फ़िगर' कहा था तो मैंने किया --prefix = (डीआईआर निर्दिष्ट किया कि इन बनाई गई फ़ाइलों को आउटपुट होना चाहिए)। मेक इंस्टॉल को पूरा किया, और इसमें शामिल हैं और lib निर्देशिका, और एंड्रॉइड एनडीके में क्रमशः इसमें शामिल हैं और lib dir शामिल हैं। मैं अभी भी इसे काम करने में असमर्थ था। मैंने मेरे लिए LAME को संभालने के लिए FFmpeg का उपयोग करने की कोशिश करने पर छोड़ दिया, और मेरे आवेदन में LAME के मूल निर्माण का उपयोग करने के लिए वापस चला गया (जिसे मैं काम पर ला सकता हूं, लेकिन ऑडियो आउटपुट सही नहीं है)। [...] –