交叉編譯目錄
『壹』 在 ubuntu-x86 下交叉編譯 ARM-64 NCNN 記錄貼
在 Ubuntux86 下交叉編譯 ARM64 NCNN 的步驟如下:
配置主機環境:
- 確保已安裝 Docker。
- 拉取基於 qemu 的 ARM64 鏡像,選擇與嵌入式板子版本相應的鏡像鏈接。
啟動 Docker 容器並掛載工作目錄:
- 配置工作目錄,例如 /home/ubuntu/Docker/cross。
- 啟動 Docker 容器,並將工作目錄掛載到容器中,以便在本地模擬 ARM64 環境進行編譯。
在容器內編譯 NCNN:
- 按照官網教程拉取 NCNN 代碼到掛載的工作目錄中。
- 在容器內更新源、安裝基礎包,並替換為清華鏡像源以獲取 ARM64 架構的依賴包。
- 開始編譯 NCNN,編譯過程與直接在 ARM64 板子上相同。
- 編譯產物默認位於 build/install 目錄下。
驗證和評估性能:
- 編譯完成後,可以將產物直接復制到板子上使用。
- 或在容器內部運行 NCNNBenchmark 以評估性能,注意 x86 模擬 ARM64 的性能會有較大折扣。
編譯 python 封裝:
- 若需要編譯 NCNN 的 Python 封裝,在容器中安裝與板子上相同的 Python 版本。
- 編譯好的 PyNCNN 庫位於 build/python 目錄下。
- 可以將整個 NCNN 目錄復制到板子上,並使用 pip install e . 命令安裝。
總結: 使用 qemu 模擬 ARM64 實現的交叉編譯,無需配置本地交叉編譯器等額外環境,適用於正式部署前的驗證。 雖然編譯效率相比直接在 ARM64 板子上低,但相比嵌入式板子的性能有顯著提升。 此方案對其他庫的編譯依賴友好,如 QT 等復雜庫的交叉編譯也值得嘗試。
『貳』 FFmpeg開發筆記(八)linux交叉編譯Android的FFmpeg庫
在Linux環境中進行FFmpeg庫的Android交叉編譯,首先需要下載Linux版本的android-ndk-r21e。登錄Linux伺服器,例如華為雲的歐拉系統,執行以下步驟:
1. 進入`/usr/local/src`目錄:
cd /usr/local/src
2. 下載並解壓ndk:
curl -O dl.google.com/android/r...
unzip android-ndk-r21e-linux-x86_64.zip
接下來,你需要將FFmpeg及相關庫(如x264、freetype、lame)的源碼上傳到伺服器,並進行必要的修改:
- 解壓源碼,替換`SYSTEM=windows-x86_64`為`SYSTEM=linux-x86_64`,並確保sh文件無回車符。
- 修改`config_x264.sh`、`config_freetype.sh`等文件,賦予可執行許可權:
chmod +x config_*.sh
3. 編譯x264庫,修改configure文件並執行編譯:
修改configure文件
./config_x264.sh
make -j4
make install
4. 對其他第三方庫進行類似操作:
./config_xxx.sh
make -j4
make install
5. 配置環境變數`PKG_CONFIG_PATH`:
在.bash_profile中添加環境變數
source .bash_profile
6. 最後,編譯FFmpeg庫:
./config_ffmpeg_full.sh
make -j4
make install
完成後,可以在指定目錄找到so文件,並將其復制到App工程的jniLibs\arm64-v8a目錄,然後按照《FFmpeg開發實戰:從零基礎到短視頻上線》的章節「12.1.3 App工程調用FFmpeg的so庫」進行App的配置、編譯和運行。
『叄』 Linux 交叉編譯FFmpeg庫
Linux 交叉編譯FFmpeg庫
配置環境
在Linux上配置NDK環境和FFmpeg,首先下載並解壓NDK,配置/etc/profile的環境變數,然後下載FFmpeg,解壓後使用./configure --help查看幫助文檔。
FFmpeg包含libavformat、libavcodec、libavutil、libswscale、libpostproc等模塊,為各種音視頻封裝格式的生成和解析、聲音/圖像編解碼、公共工具函數、視頻場景比例縮放和色彩映射轉換、後期效果處理以及工具和伺服器等。
編寫編譯腳本
定義NDK路徑,指定GCC路徑,設置FLAGS結合Linux環境修改,參考externalNativeBuild/xxx/build.ninja的傳參內容。學習資料推薦,免費報名學習音視頻知識,資料包括C/C++、Linux、FFmpeg等。
配置參數
優化大小、不編譯ffmpeg程序(命令行工具)、關閉avdevice模塊、關閉所有編碼器、關閉所有復用器、關閉所有濾鏡、開啟交叉編譯、設置GCC的前綴、關閉動態庫、開啟靜態庫、傳給gcc的參數等。
執行make完成編譯輸出
編寫腳本過程中注意關閉asm、許可權要求、手動創建輸出文件夾、命令行格式等。
移植到Android項目中使用
創建NDK項目,將編譯好的include文件夾復制到/src/main/cpp目錄下,將ffmpeg lib目錄下的文件復制到armeabi-v7a目錄下,Cmake文件中引入庫,即可愉快使用FFmpeg庫。
FFmpeg是純C的庫,需要在代碼中進行引用。顯示ffmpeg版本號完成整個流程。
至此,Linux交叉編譯FFmpeg庫的流程介紹完成。
『肆』 如何交叉編譯perl
先下載Perl源碼:https://www.perl.org/get.html , 下載版本是5.10.1
下載Perl交叉編譯源碼補丁: https://sourceforge.net/projects/perlcross.berlios/files/, 下載版本是:perl-5.10.0-cross-0.3.tar.gz
分別解壓連個文件到同一個目錄下;
1
在ubuntu中安裝 perlbrew:
- sudo apt-get install perlbrew
perlbrew init
source ~/perl5/perlbrew/etc/bashrc
perlbrew install perl-5.10.1 2
3
4
5
等待perlbrew安裝完畢;
2
3
1
合並 兩個解壓出來的perl目錄,進入perl-5.10.1的Cross目錄中:
- cp -rfv perl-5.10.0/* perl-5.10.1/
cd perl-5.10.1/Cross 2
1
文件內容如下注意加了星號的內容:
- ### Target Arch
** ARCH = arm **
#ARCH = i386-pc
#ARCH = sh4
#ARCH = mips
#ARCH = mipsel
#ARCH = ppc
## Specific arm
**#CONFIG_TARGET_ARM_SA11X0 = 1**
#CONFIG_TARGET_ARM_XSCALE = 1
### Target OS
**OS = linux**
#OS = solaris2.8 1
修改perl的config文件
- gedit Cross/config ##或者 vi gedit Cross/config
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上面加粗字體表示注意的或者修改的;
修改當前目錄(Cross目錄)中的Makefile文件:
先改變一下目錄內容的許可權:
chmod 777 /Cross/*修改的Makefile文件內容:
- export TOPDIR=${shell pwd}
- include $(TOPDIR)/config
- export CFLAGS
- ** export SYS=arm-linux **
- ** export CROSS=/stuff/bitbake/bin/tmp/sysroots/i686- linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- **
- ** export LD_LIBRARY=/stuff/bitbake/bin/tmp/sysroots/i686-linux/usr/lib:$(LD_LIBRARY_PATH) **
- export FULL_OPTIMIZATION = -fexpensive-optimizations -fomit-frame-pointer -O2
- export OPTIMIZATION = -O2
- export CC = arm-angstrom-linux-gnueabi-gcc
- export CXX = arm-angstrom-linux-gnueabi-g++
- export LD = arm-angstrom-linux-gnueabi-ld
- export STRIP = arm-angstrom-linux-gnueabi-strip
- export AR = arm-angstrom-linux-gnueabi-ar
- export RANLIB = arm-angstrom-linux-gnueabi-ranlib
- 12345678910111213141516
make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm patch
make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm perl
編譯會出錯,但是沒關系,會在根目錄生成perl可執行文件;