2012-09-30 14 views
12

के लिए एक निष्पादन योग्य - संकलित ffmpeg बनाने में असमर्थ है, मैं एंड्रॉइड आर्मेबी उपकरणों के लिए ffmpeg संकलित करने की कोशिश कर रहा हूं।
मैं roman10.net
द्वारा ट्यूटोरियल का अनुसरण कर रहा हूं उनकी दी गई बिल्ड स्क्रिप्ट armv7-a devices के लिए ffmpeg बनाती है। मैं इसे आर्मेबी के लिए बनाना चाहता हूं।
आर्म-लिनक्स-एंड्रोइडबी-जीसीसी एंड्रॉइड आर्मेबी डिवाइस

मेरा अंतिम उद्देश्य एंड्रॉइड आर्मेबी और armv7-a उपकरणों पर ffmpeg आदेश चलाने के लिए है।

तो मैं

#arm v6 
CPU=armv6 
OPTIMIZE_CFLAGS="-marm -march=$CPU" 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

करने से

#arm v7vfpv3 
CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

स्क्रिप्ट के सीपीयू भाग को बदल (मैं इसे ARMv6 के लिए बदल सोचा ffmpeg armeabi उपकरणों के साथ संगत का निर्माण होगा। मीटर मैं गलत?)

संदेह 1:
क्या मुझे टूलच भी बदलना है ऐन? हाथ-linux-androideabi-4.4.3को हाथ-EABI-4.4.0 से
यानी ?????

संदेह 2:

जब मैं चल रहा ./build.sh (toolchain बदले बिना) की कोशिश यह मुझे निम्न त्रुटि देता है:

/home/chaitanya/android/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc is unable to create an executable file. 
C compiler test failed. 

If you think configure made a mistake,.. blaah blahh blaah 

कि मैं चेतावनी कहने का बहुत कुछ के बाद:
'sub_id' को बहिष्कृत किया गया है और कई अन्य फ़ंक्शन चेतावनियों को बहिष्कृत कर दिया गया है।

मंच: ubuntu 11.10
ffmpeg संस्करण: 0.11.2
NDK: android-NDK-r5b

यहाँ अपने निर्माण स्क्रिप्ट है:

#!/bin/bash 
###################################################### 
# Usage: 
# put this script in top of FFmpeg source tree 
# ./build_android 
# It generates binary for following architectures: 
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8) 
# Customizing: 
# 1. Feel free to change ./configure parameters for more features 
# 2. To adapt other ARM variants 
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one 
###################################################### 
NDK=~/android/android-ndk-r5b 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 
function build_one 
{ 
./configure --target-os=linux \ 
    --prefix=$PREFIX \ 
    --enable-cross-compile \ 
    --extra-libs="-lgcc" \ 
    --arch=arm \ 
    #--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    #--nm=$PREBUILT/bin/arm-linux-androideabi-nm \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \ 
    --disable-shared \ 
    --enable-static \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --disable-everything \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --enable-protocol=file \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
    $ADDITIONAL_CONFIGURE_FLAG 

make clean 
make -j4 install 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 
} 

#arm v6 
CPU=armv6 
OPTIMIZE_CFLAGS="-marm -march=$CPU" 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

#arm v7vfpv3 
#CPU=armv7-a 
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG= 
#build_one 

#arm v7vfp 
#CPU=armv7-a 
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU " 
#PREFIX=./android/$CPU-vfp 
#ADDITIONAL_CONFIGURE_FLAG= 
#build_one 

#arm v7n 
#CPU=armv7-a 
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8" 
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon 
#build_one 

#arm v6+vfp 
#CPU=armv6 
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU" 
#PREFIX=./android/${CPU}_vfp 
#ADDITIONAL_CONFIGURE_FLAG= 
#build_one 

कैसे कर मैं इस समस्या से निपटता हूँ? क्या गलत हो रहा है?

उत्तर

10

मुझे यकीन नहीं है कि यह वही है जो आप देख रहे हैं लेकिन मैंने Android के लिए FFmpeg 0.11.1 बनाने के लिए एक स्क्रिप्ट बनाई है। मैंने 0.11.1 के साथ काम करने के लिए पुराने बाम्बूसर एफएफएमपीजी बिल्ड के साथ प्रदान की गई स्क्रिप्ट को संशोधित किया। मैं वर्तमान में अपने स्वयं के आवेदन में एफएफएमपीजी बनाने के लिए इस स्क्रिप्ट का उपयोग कर रहा हूं, इसलिए मुझे बिल्ड काम पता है। http://servestream.sourceforge.net/build-ffmpeg.sh पर स्थित स्क्रिप्ट। मैं इमारत करने के लिए एंड्रॉइड-एनएनडी-आर 8 बी और उबंटू 12.04 (x64) का उपयोग कर रहा हूं। आदेश स्क्रिप्ट का उपयोग करने के लिए निम्न करें:

1.) स्क्रिप्ट
2.) स्क्रिप्ट खोलें डाउनलोड करें और पैकेज चर संशोधित आवेदन के पैकेज
3. मैच के लिए) यह निष्पादन करें: chmod + x निर्माण -ffmpeg.sh
4.), स्क्रिप्ट द्वारा उपयोग NDK चर सेट उदाहरण के लिए: निर्यात NDK =/घर/उपयोगकर्ता/android-NDK-r8b
5.) स्क्रिप्ट चलाएं:।/build-ffmpeg.sh

संकलित बाइनरी मौजूदा कामकाजी निर्देशिका में नव निर्मित "अंतिम-निर्माण" फ़ोल्डर में स्थित होगी। (नोट: स्क्रिप्ट आर्मेबी, आर्मेबी-वी 7 ए और x86 आर्किटेक्चर के लिए बाइनरी बनाती है)

मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा।

अद्यतन:

तो स्क्रिप्ट नहीं मिला है, http://sourceforge.net/p/servestream/code/HEAD/tree/ffmpeg/scripts/arm-build.sh

+0

मैंने कोशिश की और अभी भी "arm-linux-androideabi-gcc निष्पादन योग्य फ़ाइल बनाने में असमर्थ" मैं उबंटू 12.10 64 बिट, ffmpeg-1.0 चला रहा हूं और उपरोक्त अपनी स्क्रिप्ट का उपयोग कर रहा हूं। कृपया – JeffG

+0

सहायता करें मैं 12.04 (64 बिट) और एनडीके संस्करण आर 8 बी का उपयोग कर रहा हूं। यह त्रुटि आमतौर पर तब होती है जब आप एक अलग एनडीके संस्करण का उपयोग कर रहे होते हैं। यदि ऐसा नहीं है तो कृपया जवाब दें और मैं इस मुद्दे को हल करने में आपकी सहायता करने की कोशिश करूंगा। –

+0

अरे, क्या आप मुझे बता सकते हैं कि इसे विंडोज वातावरण में कैसे निष्पादित किया जाए .. –

0

मैं एक ऐसी ही त्रुटि मिली (सी संकलक परीक्षण विफल) r8d NDK संस्करण है और यह भी r8b का उपयोग कर ffmpeg का निर्माण करने की कोशिश करते हुए।

मुझे बाद में मिली समस्या यह थी कि नवीनतम उबंटू पर "यहां निकालें" विकल्प कुछ बग लगता है। यह सब कुछ निकाला नहीं है। तो, 'tar -jxf' का उपयोग ठीक से निष्कर्ष निकालें और आप बिन फ़ोल्डर में अधिक निष्पादन योग्य देखेंगे।

आप इसे संदर्भ के लिए देख सकते हैं। http://code.google.com/p/android/issues/detail?id=41187

20

मुझे अंत में इस समस्या का सामना करते समय मेरे सेटअप के साथ समस्या मिली ... arm-build.sh स्क्रिप्ट को देखते हुए, मैंने स्क्रिप्ट का पालन करना शुरू कर दिया। "TOOLCHAIN ​​= ..." पथ पर ध्यान दें।

मूल रूप से पथ था: Toolchain = echo $NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/*-x86

जब मैं सत्यापित करने के लिए इस मार्ग से मौजूद चला गया, मैंने देखा है कि ऐसा नहीं किया। मुझे लगता है कि कारण यह है कि मेरे पास 64-बिट बिल्ड है। .../toolchains/हाथ-linux-androideabi-4.6/पहले से बनाए गए/लिनक्स-x86_64

क्या मैं फ़ोल्डर को कॉपी किया गया था कर समाप्त हो गया है, और यह Linux- करने के लिए "का नाम बदलने:

मेरे पथ वास्तव में है x86 "और अब सब संकलन कर रहा है।

उम्मीद है कि यह किसी की मदद करेगा!

+8

मैक ओएस एक्स पर मेरा/डार्विन-x86_64 था – user1132959

संबंधित मुद्दे