簡體   English   中英

在適用於Android的Windows OS中的Cygwin下構建FFMPEG

[英]Build FFMPEG under Cygwin in Windows OS for Android

在過去的幾天里,我一直在努力使用Cygwin在android-ndk-14d上為Windows操作系統上的Android項目構建FFMPEG 我遵循了很多教程,並且在使用build_android.sh構建FFMPEG時遇到了很多錯誤。

這是我到目前為止已采取的步驟。

我下載了Cygwin,並配置了構建FFMPEG所需的所有依賴項。

我使用文本編輯器打開了ffmpeg-3.3.1 / configure文件,並更改為以下幾行。

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

我的build_android.sh如下

#!/bin/bash
NDK=C:/~/ndk-bundle
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-\
    --target-os=android \
    --arch=arm \
    --cpu=armv7-a \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

我跑了這些命令

dos2unix build_android.sh 
chmod +x build_android.sh
./build_android.sh

並且,當前出現此錯誤

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p重建/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi /4.9.x/../../../../arm-linux-an droideabi / bin / ld.exe:錯誤:libavutil / libavutil.so:1:1:語法錯誤,意外的“!”,預期$ end

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p重建/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi /4.9.x/../../../../arm-linux-an droideabi / bin / ld.exe:錯誤:libavutil / libavutil.so:不是對象或存檔collect2.exe:錯誤:ld返回1個退出狀態make:*** [library.mak:94:libswscale / libswscale-4.so]錯誤1 LD

libswscale / libswscale-4.so c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p重建/windows-x86_64/bin/../lib/ gcc / arm-linux-androideabi / 4.9.x /../../../../ arm-linux-an droideabi / bin / ld.exe:錯誤:libavutil / libavutil.so:1:1:語法錯誤,意外的“!”,表示$ end

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p重建/ windows-x86_64 / bin /../ lib / gcc / arm-linux-> androideabi / 4.9.x /../../../../ arm-linux- droideabi / bin / ld.exe:錯誤:libavutil / libavutil.so:不是對象或存檔collect2.exe:錯誤: ld返回了1個退出狀態,使得:*** [library.mak:94:libswscale / libswscale-4.so]錯誤1

如何使用android-ndk-r10d在Windows上編譯ffmpeg-2.5.3

從以上鏈接的評論中可以看出,在Linux / Unix OS中構建FFMPEG似乎更容易。 我的第一個問題可能是愚蠢的。 但是,如果有人可以指導我解決這個問題,我將不勝感激。

如果我在Linux for Android上構建FFMPEG,我是否可以復制或移動這些結果輸出(arm / lib文件夾包含共享庫,而arm / include文件夾包含libavcodec,libavformat,libavfilter,libavutil,libswscale等的頭文件。 )安裝到Windows操作系統,並將其用於我的Android項目?

由於我的公司僅為項目提供Windows操作系統,因此我必須在Windows操作系統上使用它們。

感謝您的寶貴時間,如果您可以提供任何反饋意見,那肯定會有所幫助。

供參考,這是我的config.log

END C:/ffmpegtmp/ffconf.qoBF6X98.c C:/用戶/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm- linux-androideabi-gcc --sysroot = C:/ Users / sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm /

-isysroot C:/用戶/ sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm / -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -Dstrtod = avpriv_strtod -DPIC -Os -fpic- marm -march = armv7-a -std = c11 -fomit-frame-pointer -fPIC -marm -pthread -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings- Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括號-Wno-switch -Wno-format-zero-length -Wno-pointer-sign- O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror = format-security -Werror = implicit-function-declaration -Werror = missing-prototypes -Werror = return-type -Werror = vla- Wformat -c -oc:/ffmpegtmp/ffconf.8joa74tC.o

c:/ffmpegtmp/ffconf.qoBF6X98.c check_cflags -fdiagnostics-color =自動test_cflags -fdiagnostics-color = auto check_cc -fdiagnostics-color =自動開始c:/ffmpegtmp/ffconf.qoBF6X98.c 1 int x; END C:/ffmpegtmp/ffconf.qoBF6X98.c C:/用戶/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm- linux-androideabi-gcc --sysroot = C:/ Users / sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm /

-isysroot C:/用戶/ sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm / -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -Dstrtod = avpriv_strtod -DPIC -Os -fpic- marm -march = armv7-a -std = c11 -fomit-frame-pointer -fPIC -marm -pthread -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings- Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括號-Wno-switch -Wno-format-zero-length -Wno-pointer-sign- O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror = format-security -Werror = implicit-function-declaration -Werror = missing-prototypes -Werror = return-type -Werror = vla- Wformat -fdiagnostics-color = auto -c -oc:/ffmpegtmp/ffconf.8joa74tC.oc:/ffmpegtmp/ffconf.qoBF6X98.c test_cflags -Wmaybe-uninitialized check_cc -Wmaybe-未初始化BEGIN

c:/ffmpegtmp/ffconf.qoBF6X98.c 1 int x; END C:/ffmpegtmp/ffconf.qoBF6X98.c C:/用戶/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm- linux-androideabi-gcc --sysroot = C:/ Users / sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm /

-isysroot C:/用戶/ sonic / AppData / Local / Android / sdk / ndk-bundle / platforms / android-9 / arch-arm / -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -Dstrtod = avpriv_strtod -DPIC -Os -fpic- marm -march = armv7-a -std = c11 -fomit-frame-pointer -fPIC -marm -pthread -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings- Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括號-Wno-switch -Wno-format-zero-length -Wno-pointer-sign- O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror = format-security -Werror = implicit-function-declaration -Werror = missing-prototypes -Werror = return-type -Werror = vla- Wformat -fdiagnostics-color = auto-可能未初始化-c -oc:/ffmpegtmp/ffconf.8joa74tC.oc:/ffmpegtmp/ffconf.qoBF6X98.c

如果您使用具有相同ABI(應用程序二進制接口)的相同編譯器版本,則應該沒有問題。 我以前使用RISC-V庫已經做到了,我想與ARM一樣。

實際上,這正是您在Windows上使用Android NDK進行的工作,編譯ARM二進制文件以在Linux上運行! 無論您是在Windows還是Linux上交叉編譯FFMPEG,您最終仍然擁有能夠在同一Android系統上運行的相同二進制文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM