1. 程式人生 > 其它 >ubuntu 上交叉編譯 linaro 的庫

ubuntu 上交叉編譯 linaro 的庫

技術標籤:C++linux交叉編譯linaroubuntu

交叉編譯是在一個平臺上編譯另外一個平臺可用的應用程式,此時可以想象,另外一個平臺上的系統庫不同,所以我們要指定編譯時使用的系統庫。另外一個平臺上執行環境不同,記憶體的大小端等,所以我們要使用單獨編譯工具。
即分別設定 SYSROOT 和 C_COMPILER / CXX_COMPILER

編譯linaro環境下的三方庫

這裡介紹使用交叉編譯的方式,編譯三方庫的過程。

一般流程

正常地,我們為cmake設定好要用的工具鏈,系統環境,以及編譯輸出的庫路徑,直接cd build && cmake .. && make install

即可。

  1. 建立一個 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)
  1. 建立一個build.sh,並寫入如下內容。
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=
../aarch64.toolchain.cmake -DCMAKE_INSTALL_PREFIX=../opt .. make install
  1. 檢視輸出結果

tree opt,正常應該可以看到你想要的目錄樹結構。

確認後,就可以將opt目錄直接拷貝走,拿去使用了。

當然,還有一些三方庫是沒有這麼容易編譯的。

部分三方庫編譯

opencv 編譯

原本按照上面的一般流程,opencv是可能編譯失敗的,或者說這裡首先要清晰我們的目標。

可能失敗的原因是,opencv有些模組依賴很多其他的庫,而我們提供的 $CMAKE_SYSROOT目錄下如果找不到這些庫,就會導致編譯失敗。

但是,我們的目標可能只是使用opencv的核心庫,如opencv_video這樣的庫,我們是不打算使用的。所以直接忽略他,不進行編譯即可。

  1. 同一般方法的1 2步驟,發現最後一步 make install發生錯誤,即缺少一部分庫,阻止了編譯的繼續。
  2. 調整編譯選項,只保留主要的核心庫。
ccmake build

保留圖示幾項,其中opencv_world是把要生成的so打包成一個。

按回車是修改,修改完成後,按 c 是生成配置。

完成之後,即可再進入build目錄 make install