workflow交叉编译:基于 gcc-linaro-7.5.0 aarch64-linux-gnu 工具链

交叉编译工具链搭建

工具链下载

gcc-linaro-7.5.0

解包与环境变量添加

tar -xkvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar

解包得到的工具链我选择复制到

/opt/toolchain/aarch64-linux-gnu/

目录下
在这里插入图片描述
使用Vim编辑 ~/.bashrc
添加以下内容,注意修改${username}字段

#Cmake-toolchain
export TOOLCHAIN=aarch64-linux-gnu
export TOOLCHAIN_HOME=/opt/toolchain/${TOOLCHAIN}
export PATH="${TOOLCHAIN_HOME}/bin:${PATH}"

运行

source ~/.bashrc

或直接重启terminal,完成环境变量的添加。

进行交叉编译

首先交叉编译 openssl 库,这一部分工作可以参考我交叉编译 openssh 写的博客:
目前还没有写完发出来
编译完成后,执行make install 并记录目标目录备用。
接下来克隆workflow仓库。

git clone https://github.com/sogou/workflow.git --recursive 

如果git速度过慢,可以设置代理,这里需要代理软件开启允许局域网连接,我使用了统一局域网下的win11系统下的 某2ray某 软件作为代理则IP为win11主机IP,port根据 某2ray某 的设置确定

git config --global http.https://github.com.proxy socks5://${IP}:${PROT}

然后执行交叉编译指令,这里利用CMAKE_TOOLCHAIN_FILE方法进行交叉编译,首先再workflow目录下创建aarch64.cmake文件,文件内容为:

#指定交叉编译器路径
set(TOOLSCHAIN_PATH "/opt/toolchain/aarch64-linux-gnu/")
set(TOOLCHAIN_HOST "${TOOLSCHAIN_PATH}bin/aarch64-linux-gnu")

#指定嵌入式系统的编译时寻找include和lib的路径(修改为"${dir}/usr/include"和"${dir}/usr/lib"),可不设置
# set(SYSROOT_PATH "/home/shawntao/Backup/arm-use")
# message(STATUS "Using sysroot path: ${SYSROOT_PATH}")

set(TOOLCHAIN_CC "${TOOLCHAIN_HOST}-gcc")
set(TOOLCHAIN_CXX "${TOOLCHAIN_HOST}-g++")

#告诉cmake是进行交叉编译
set(CMAKE_CROSSCOMPILING TRUE)

# Define name of the target system
set(CMAKE_SYSTEM_NAME "Linux")
# Define the compiler
set(CMAKE_C_COMPILER ${TOOLCHAIN_CC})
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_CXX})

#库文件和头文件优先查找的路径
set(CMAKE_FIND_ROOT_PATH "${SYSROOT_PATH}" "${CMAKE_PREFIX_PATH}" "${TOOLSCHAIN_PATH}")

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

修改上述文件中的交叉编译工具链路径(修改成大家linux系统中工具链的实际路径)。
随后修改${dir}/workflow/src下CMakeLists.txt文件前几行为(这里的操作是为了让cmake找到之前交叉编译好的openssl):

cmake_minimum_required(VERSION 3.6)

if (NOT CMAKE_SYSTEM_NAME STREQUAL "Android")

	if(CMAKE_CROSSCOMPILING)
		message(STATUS "CORSS COMPILE START")
		message(STATUS "openssl path is: ${OPENSSL_DIR}")
		set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/include")
		set(OPENSSL_LINK_DIR "${OPENSSL_DIR}/lib")
		link_directories(${OPENSSL_LINK_DIR} ${INC_DIR}/workflow)

	else ()
		find_package(OpenSSL REQUIRED)
		
	endif ()
endif ()

include_directories(${OPENSSL_INCLUDE_DIR} ${INC_DIR}/workflow)

修改完成后,cd到workflow目录下,运行以下指令进行编译。

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64.cmake -DOPENSSL_DIR="/home/shawntao/Backup/arm-use/install/openssl" ..
make -j

注意修改${OPENSSL_DIR}变量:为openssl库交叉编译完成后,make install执行后的目标路径(上面让大家记录备用的路劲),我这里目录如下图所示
在这里插入图片描述
运行make -j之后如果无报错则编译成功,编译成功的文件位于: ${dir}/workflow/_include目录和 ${dir}/workflow/_lib目录下
在这里插入图片描述
之后就可以利用交叉编译好的workflow进行后续开发了。
记得将编译好的文件拷贝到开发板(拷贝_lib文件夹下的 .so 文件至/usr/lib下即可)。
我这里运行了一个1412小姐姐大佬给的 helloworld demo。
在这里插入图片描述
再立个FLAG:后续利用workflow的开发过程,我也会尽量记录下来,希望能够对大家有所帮助。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值