2012-08-30 166 views
1

我現在的情況是;已經爲Android編譯ffmpeg和libx264,分別爲共享庫和靜態庫。由於我有libx264.a和libffmpeg.so,因此只需將它們鏈接起來並獲得一個ffmpeg庫,以便我繼續使用我的應用程序。但是,有些問題仍未得到解答。我在Windows 7下使用Ubuntu和虛擬機。我使用的是x264的最新版本,ffmpeg 0.10.4版本和NDK 7.另一個ffmpeg/libx264問題

我試圖調整標誌(extracf和extrald)以便將libx264包含到ffmpeg編譯過程中,但我一直失敗。下面你可能會發現我的構建腳本ffmpeg和我遇到的錯誤。

NDK=~/Android_NDK_r7b 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 
x264=/usr/local 
#x264v2=~/x264 
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 " \ 
    --extra-cflags="-I$x264/include" \ 
    --enable-shared \ 
    --enable-static \ 
    #--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --extra-ldflags="-L$x264/lib" \ 
    --disable-everything \ 
    # --enable-demuxer=mov \ 
    # --enable-demuxer=h264 \ 
    # --disable-ffplay \ 
    --enable-gpl \ 
    --enable-libx264 \ 
    # --enable-protocol=file \ 
    # --enable-avformat \ 
    # --enable-avcodec \ 
    # --enable-encoder=libx264 \ 
    # --enable-decoder=rawvideo \ 
    #--enable-decoder=mjpeg \ 
    # --enable-decoder=h263 \ 
    # --enable-decoder=mpeg4 \ 
    # --enable-encoder=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 v7vfpv3 
CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./androidIncludeTrialsNDK7/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

如果我基本上刪除線extracf和extrald標誌和使用其他的(評論出局),它的工作原理只是沒有發現錯誤libx264罰款。否則,我會得到下面的錯誤。

./buildnew.sh: line 35: --extra-cflags=-I/usr/local/include: No such file or directory 
./buildnew.sh: line 38: --extra-ldflags=-L/usr/local/lib: No such file or directory 
./buildnew.sh: line 40: --disable-everything: command not found 
./buildnew.sh: line 44: --enable-gpl: command not found 

編譯過程以下列結束。

make: *** [libavdevice/v4l.o] Error 1 
make: *** Waiting for unfinished jobs.... 
/home/mehmet/Android_NDK_r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar: creating libavcodec/libavcodec.a 
/home/mehmet/Android_NDK_r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ld: cannot open output file ./androidIncludeTrialsNDK7/armv7-a/libffmpeg.so: No such file or directory 

我已經安裝在我的目錄/ home /穆罕默德/ X264 X264,我也查whereis x264.a,它顯示我作爲在/ usr/local/lib目錄。我試圖改變路徑$ x264指向home/mehmet/x264文件夾,但我得到了同樣的錯誤。

最後,如果我同時啓用extracf和extrald標誌(包括註釋的和使用的標誌)。我得到了上面提到的同樣的錯誤。恐怕我在這裏做了一個簡單的錯字,但看不到它,這讓我發瘋。非常感謝你的幫助。

最好。

編輯

我刪除了評論,現在獲得以下。

./buildnew.sh: 4: ./buildnew.sh: function: not found 
ERROR: libx264 not found 

當我運行腳本時,從終端觀察到上述錯誤。它建立到某一點,並完成過程中出現以下錯誤。

libavcodec/libavcodec.a(libx264.o): In function `X264_frame': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:159: undefined reference to `x264_picture_init' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:179: undefined reference to `x264_encoder_reconfig' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:191: undefined reference to `x264_encoder_encode' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:197: undefined reference to `x264_encoder_delayed_frames' 
libavcodec/libavcodec.a(libx264.o): In function `encode_nals': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:196: undefined reference to `x264_bit_depth' 
libavcodec/libavcodec.a(libx264.o): In function `X264_close': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:231: undefined reference to `x264_encoder_close' 
libavcodec/libavcodec.a(libx264.o): In function `X264_init': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:284: undefined reference to `x264_param_default' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:292: undefined reference to `x264_param_default_preset' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:305: undefined reference to `x264_param_parse' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:502: undefined reference to `x264_param_apply_fastfirstpass' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:505: undefined reference to `x264_param_apply_profile' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:544: undefined reference to `x264_encoder_open_125' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:554: undefined reference to `x264_encoder_headers' 
./buildnew.sh: 51: ./buildnew.sh: build_one: not found 
+0

那麼,它確實解決了你的第一個問題。反正這個問題是不同的。您的編譯沒有找到libx264庫。它是否正確安裝在系統上?你的鏈接路徑應該提供libx264位置的路徑,對不對?我不認爲我看到了。 – av501

+0

@ av501,感謝您的幫助。墨菲定律讓我取得了一些進展,但遇到了新的錯誤。 好吧,我改變了標誌指出/ home/myname/x264/buildfolder/include和lib。我沒有得到這些錯誤,實際上我沒有得到任何這些錯誤,但看不到libx264。在我的ffmpeg輸出文件安裝的文件夾中。任何想法是什麼引起的? –

+0

歡迎。如果這有助於接受答案,並要求單獨提供答案,以便其他人也可以加入協助您。與此同時,我會說爲什麼不檢查路徑,當你做了安裝x264的地方去了。 – av501

回答

1

您的錯誤與ffmpeg/libx264無關。中間不能有這些評論。看看錯誤

./buildnew.sh:第35行:--extra-CFLAGS = -I在/ usr /本地/包括:沒有這樣的文件或目錄

它認爲--extra-CFLAGS是命令等等,作爲評論之後的第一個命令。

你的命令應該是連續的,沒有任何評論。 「\」運算符不適用於註釋。