当前位置:首页 » 编程软件 » 交叉编译c语言

交叉编译c语言

发布时间: 2025-10-13 02:25:19

‘壹’ RK3568源码编译与交叉编译环境搭建

本篇文章旨在指导如何为飞凌OK3568-C开发板构建linux系统所需的软件交叉编译环境。对于C/C++代码开发,只需在Ubuntu虚拟机中安装RK3568对应的交叉编译器(gcc/g++)即可。若要进行Qt开发,则需额外配置交叉编译环境以编译与RK3568配套的Qt源码。以下为两种环境配置方法的详细步骤。

### C/C++交叉编译环境配置

1. **下载aarch64类型的gcc**:
在Linaro官网获取针对RK3568(Cortex-A55内核64位)开发板的GCC交叉编译工具链。推荐下载:`gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz`。解压后,配置环境变量并使用`aarch64-linux-gnu-gcc`或`aarch64-linux-gnu-g++`交叉编译C或C++程序。

2. **交叉编译C/C++程序测试**:
编写一个简单的C++测试程序(main.cpp),使用`aarch64-linux-gnu-g++`编译并运行,验证编译环境正确性。

3. **板子的WIFI自动配网**:
使用脚本自动连接WIFI,确保开发过程中网络连通。将脚本加入开机自启动程序中,实现自动连接。

### RK3568 Linux源码编译

- **基础环境配置**:安装必要的库,如依赖包和Qt开发所需库。安装Linux版Qt Creator(可选)以方便Qt开发。

- **准备RK3568源码**:从飞凌官方资料中复制源码至Ubuntu虚拟机,解压并准备好编译环境。

- **编译RK3568源码**:确认虚拟机有足够磁盘空间和内存。执行编译脚本,选择ok3568配置,完成编译过程。编译完成后,生成适合全烧写或分步烧写的镜像文件。

- **内核单独编译**:如果仅修改内核代码,可单独编译内核,简化编译过程。

### Qt程序交叉编译测试

- **Qt程序交叉编译**:利用RK3568源码编译结果中的工具进行Qt程序编译测试,确保交叉编译环境正常工作。

- **Qt程序在板子中运行**:通过ADB传输编译出的可执行文件至板子,验证Qt程序的正确运行。

### 总结

本文详细介绍了为飞凌OK3568-C开发板搭建软件开发环境的全过程,包括C/C++和Qt开发所需的交叉编译环境配置。通过本文的步骤指导,开发者可以顺利为该开发板构建Linux系统,并进行相应的编程工作。

‘贰’ 如何使用CMake进行交叉编译

cmake交叉编译配置

很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。

CMake给交叉编译预留了一个很好的变量CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER,如果用Qt的话需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的话需要更改的BOOST_ROOT(具体查看相关Findxxx.cmake里面指定的路径)。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。

toolChain脚本中设置的几个重要变量

1.CMAKE_SYSTEM_NAME:

即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.

2. CMAKE_C_COMPILER:

顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。

3. CMAKE_CXX_COMPILER:

同上,此时代表的是C++编译器。

4. CMAKE_FIND_ROOT_PATH:

指定了一个或者多个优先于其他搜索路径的搜索路径。比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找,然后才会去你自己的/usr/lib和/lib进行查找,如果你有一些库是不被包含在/opt/arm里面的,你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH,比如

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

该变量能够有效地重新定位在给定位置下进行搜索的根路径。该变量默认为空。当使用交叉编译时,该变量十分有用:用该变量指向目标环境的根目录,然后CMake将会在那里查找。

5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER

6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中增加option来改变局部设置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

8. BOOST_ROOT:

对于需要boost库的用户来说,相关的boost库路径配置也需要设置,因此这里的路径即ARM下的boost路径,里面有include和lib。

9. QT_QMAKE_EXECUTABLE:

对于Qt用户来说,需要更改相关的qmake命令切换成嵌入式版本,因此这里需要指定成相应的qmake路径(指定到qmake本身)

toolChain demo

# this is required
SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)

# search for programs in the build host directories (not necessary)
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)

# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)

这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。

热点内容
pythonwhile用法 发布:2025-10-13 04:26:03 浏览:591
云服务器该买哪个镜像的 发布:2025-10-13 04:18:51 浏览:587
dns劫持源码 发布:2025-10-13 04:12:41 浏览:591
sqlserveruuid 发布:2025-10-13 04:00:02 浏览:966
开源协作源码 发布:2025-10-13 03:51:21 浏览:711
安卓数据网络如何打开 发布:2025-10-13 03:32:55 浏览:701
饥荒如何更改服务器设置 发布:2025-10-13 03:21:05 浏览:130
安卓乘车码怎么注销 发布:2025-10-13 03:16:27 浏览:625
游戏脚本线下培训 发布:2025-10-13 03:14:54 浏览:302
linuxshell脚本awk 发布:2025-10-13 03:14:47 浏览:487