ubuntu 上交叉編譯 linaro 的庫
阿新 • • 發佈:2021-02-11
交叉編譯是在一個平臺上編譯另外一個平臺可用的應用程式,此時可以想象,另外一個平臺上的系統庫不同,所以我們要指定編譯時使用的系統庫。另外一個平臺上執行環境不同,記憶體的大小端等,所以我們要使用單獨編譯工具。
即分別設定 SYSROOT 和 C_COMPILER / CXX_COMPILER
編譯linaro環境下的三方庫
這裡介紹使用交叉編譯的方式,編譯三方庫的過程。
一般流程
正常地,我們為cmake設定好要用的工具鏈,系統環境,以及編譯輸出的庫路徑,直接cd build && cmake .. && make install
- 建立一個 aarch64.toolchain.cmake 檔案,並寫入如下內容。(路徑按實際情況修改)
cmake_minimum_required(VERSION 2.8.0)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TOOLCHAIN_DIR /usr/local/arm/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu)
set(CMAKE_SYSROOT /usr/local/arm/sysroot)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR} /bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
- 建立一個build.sh,並寫入如下內容。
cd build
cmake -DCMAKE_TOOLCHAIN_FILE= ../aarch64.toolchain.cmake -DCMAKE_INSTALL_PREFIX=../opt ..
make install
- 檢視輸出結果
tree opt
,正常應該可以看到你想要的目錄樹結構。
確認後,就可以將opt目錄直接拷貝走,拿去使用了。
當然,還有一些三方庫是沒有這麼容易編譯的。
部分三方庫編譯
opencv 編譯
原本按照上面的一般流程,opencv是可能編譯失敗的,或者說這裡首先要清晰我們的目標。
可能失敗的原因是,opencv有些模組依賴很多其他的庫,而我們提供的 $CMAKE_SYSROOT
目錄下如果找不到這些庫,就會導致編譯失敗。
但是,我們的目標可能只是使用opencv的核心庫,如opencv_video這樣的庫,我們是不打算使用的。所以直接忽略他,不進行編譯即可。
- 同一般方法的1 2步驟,發現最後一步
make install
發生錯誤,即缺少一部分庫,阻止了編譯的繼續。 - 調整編譯選項,只保留主要的核心庫。
ccmake build
保留圖示幾項,其中opencv_world是把要生成的so打包成一個。
按回車是修改,修改完成後,按 c 是生成配置。
完成之後,即可再進入build目錄 make install