cmake交叉编译

最近要把程序移植到armv7环境中,需要将程序和依赖库全部移植,因硬件资源有限,选择的是交叉编译的路线。

新建ubuntu 20.04的虚拟机,然后安装开发环境、交叉编译环境等工具。

安装c++编译工具
sudo apt install build-essential

安装工具:
sudo apt install make
sudo apt install unzip
sudo apt install cmake

安装交叉编译工具:
sudo apt install gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf

 

下一步是交叉编译依赖库,搜索了一圈,最后的方法是,新建一个cmake配置文件,内容为:

SET (CMAKE_SYSTEM_NAME arm_linux)
SET (CMAKE_SYSTEM_PROCESSOR armv7l)

SET (CMAKE_C_COMPILIER "/usr/bin/arm-linux-gnueabihf-gcc")
SET (CMAKE_CXX_COMPILER "/usr/bin/arm-linux-gnueabihf-g++")

 

然后编译依赖库时,使用的命令:

cmake -DCMAKE_TOOLCHAIN_FILE=arm-linux.cmake -DBUILD_SHARED_LIBS=ON ..

然后再make

因为是交叉编译,依赖库没有执行make install

对于依赖其他库的程序和库,需要在CMakelist.txt中增加依赖关系(以TinyXML2为例):

#先注释原find_package语句

#find_package(TinyXML2 CONFIG REQUIRED)

#实现find_package功能,主要是定义3个变量,然后把头文件和库文件路径加入到搜索路径中

set(TinyXML2_FOUND TRUE)
set(TinyXML2_INCLUDE_DIR ${THIRDPARTY_HOME}/tinyxml2-6.0.0)
set(TinyXML2_LIBRARY ${THIRDPARTY_HOME}/tinyxml2-6.0.0/build)
include_directories(${TinyXML2_INCLUDE_DIR})
link_directories(${TinyXML2_LIBRARY})

 

仅此记录一下今天收获。

 

posted @ 2023-07-20 20:17  strongbug1  阅读(176)  评论(0编辑  收藏  举报