1. 程式人生 > >(十) x264交叉編譯

(十) x264交叉編譯

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 "編譯結束"

其他指令集類似,同上。