最近要把程序移植到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})
仅此记录一下今天收获。
标签:gnueabihf,cmake,交叉,TinyXML2,编译,install,linux,arm From: https://www.cnblogs.com/strongbug/p/17569570.html