(十) x264交叉編譯
阿新 • • 發佈:2018-12-11
x264v交叉編譯:(同ffmpeg交叉編譯類似,ffmpeg中也包含x264庫) 1、tar -xf last_x264.tar.bz2 然後 cd x264-snapshot-20180922-2245 ./configure --help // 檢視配置幫助 Usage: ./configure [options] Help: -h, --help print this message Standard options: --prefix=PREFIX install architecture-independent files in PREFIX // 編譯生成的路徑 [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] --bindir=DIR install binaries in DIR [EPREFIX/bin] --libdir=DIR install libs in DIR [EPREFIX/lib] --includedir=DIR install includes in DIR [PREFIX/include] --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS --extra-rcflags=ERCFLAGS add ERCFLAGS to RCFLAGS Configuration options: --disable-cli disable cli --system-libx264 use system libx264 instead of internal --enable-shared build shared library // 編譯成動態庫的話要修改x264的configure檔案,將該指令碼中所有 SONAME=libx264.so.$API 修改成 SONAME=libx264_$API.so(名字隨便取,.so結尾即可,最終匯入也是此so檔案) 此為最終生成的動態庫全稱,如果是 .$API 結尾,android不認識,通過重新命名檔案的方式無效 x264編譯時會生成一個 libx264.so 中間檔案,所以名字不能取成這樣,會衝突 --enable-static build static library // 編譯生成靜態庫,shared 與 static 必須 disable一個 enable一個,否則 make install 時無法拷貝生成標頭檔案(不管什麼指令集,生成的標頭檔案都是一樣的)與庫檔案 --disable-opencl disable OpenCL features --disable-gpl disable GPL-only features --disable-thread disable multithreaded encoding --disable-win32thread disable win32threads (windows only) --disable-interlaced disable interlaced encoding support --bit-depth=BIT_DEPTH set output bit depth (8, 10, all) [all] --chroma-format=FORMAT output chroma format (400, 420, 422, 444, all) [all] Advanced options: --disable-asm disable platform-specific assembly optimizations // 架構指令集優化,disable的話,就是禁止neon(浮點的協處理器)的指令。需要在指令碼的所有enable項前新增此項,否則報 Found no assembler --enable-lto enable link-time optimization --enable-debug add -g // 除錯 --enable-gprof add -pg --enable-strip add -s --enable-pic build position-independent code Cross-compilation: // 交叉編譯選項 --host=HOST build programs to run on HOST // 軟體在什麼平臺下執行 --host=arm(arm、i686、x86_64)-linux , 不配置此項也可以? --cross-prefix=PREFIX use PREFIX for compilation tools // 交叉編譯的工具,...gcc ...g++ 等 --sysroot=SYSROOT root of cross-build tree // 交叉編譯的平臺 External library support: --disable-avs disable avisynth support --disable-swscale disable swscale support --disable-lavf disable libavformat support --disable-ffms disable ffmpegsource support --disable-gpac disable gpac support --disable-lsmash disable lsmash support 2、執行以下指令碼:(armv7-a,其他指令集參看對應指令碼) #!/bin/bash echo "開始編譯x2642android" # NDK路徑 NDK=/home/hankin/Desktop/mpeg/ndk/android-ndk-r14b # android 5.0 PLATFORM=$NDK/platforms/android-21/arch-arm # 交叉編譯工具 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 CPU=armv7-a # 生成的編譯檔案放置的路徑 PREFIX=/home/hankin/Desktop/mpeg/x264/android-build-x264/$CPU-static function buildFF { echo "開始配置x264" ./configure \ --prefix=$PREFIX \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --sysroot=$PLATFORM \ --host=arm-linux \ --disable-asm \ --disable-shared \ --enable-static \ --enable-debug \ --enable-pic echo "配置結束" } buildFF make clean make -j16 make install echo "編譯結束"
其他指令集類似,同上。