cmake_helloworld(arm-gcc)

本文介绍如何使用CMake进行项目的构建,并针对ARM架构进行交叉编译。内容包括CMakeLists.txt文件的编写,配置指定的交叉编译器arm-gcc及arm-g++, 并演示了从创建目录到编译运行的整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.helloworld.c

#include <stdio.h>
int main()
{
    printf("Hello World Test!\n");
    return 0;
}

2.CMakeLists.txt

set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")
set(CMAKE_C_COMPILER "arm-linux-gcc")
set(CMAKE_CXX_COMPILER "arm-linux-g++") 

#SET(CMAKE_C_COMPILER "/usr/bin/gcc")
#SET(CMAKE_CXX_COMPILER "/usr/bin/g++")

project(hello_jelly)
set(APP_SRC main.c)
add_executable(${PROJECT_NAME} main.c)
 
#print message
message(${PROJECT_SOURCE_DIR})

3.cmake

mkdir build
cd build
cmake ..
make

4.运行

./hello_jelly 

在这里插入图片描述

5.CMakeLists.txt 通用版

project( main )
cmake_minimum_required(VERSION 2.8) 
#添加头文件路径
include_directories(/usr/local/include /usr/local/include/opencv /usr/local/include/opencv2)
#添加库文件路径
link_directories(/usr/local/lib)

#set(TEST_CPP 22_UseIteratorAccessPixel.cpp)
aux_source_directory(. DIR_SRCS)

add_executable(main ${DIR_SRCS})
target_link_libraries( main -lopencv_core  -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lopencv_video)

指定arm-gcc

# 配置 ARM 交叉编译
set(CMAKE_SYSTEM_NAME Linux) #设置目标系统名字
set(CMAKE_SYSTEM_PROCESSOR arm) #设置目标处理器架构
# 指定编译器的 sysroot 路径
set(TOOLCHAIN_DIR /opt/toolchain/aarch64-rockchip1031-linux-gnu)

# 指定交叉编译器 arm-gcc 和 arm-g++
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-g++)

example

# 父目录下的CMakeLists.txt 
project(main)
cmake_minimum_required(VERSION 2.8) 

set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")
set(CMAKE_C_COMPILER "aarch64-none-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "aarch64-none-linux-gnu-g++") 

set(current_dir "${CMAKE_CURRENT_SOURCE_DIR}")

#添加头文件路径
include_directories(${current_dir}/include)
#添加库文件路径
link_directories(${current_dir}/lib)
 
add_executable(main test.c)
target_link_libraries( main -lusb-1.0)
<think>好的,我现在需要帮助用户解决关于安装C++编译系统和指定GCC Linaro工具链的问题。用户提到的是gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2这个工具链文件,询问是否可行。 首先,我需要确认用户的需求。他们可能是在进行嵌入式开发或者交叉编译,目标平台是ARM架构的Linux系统,比如树莓派或其他ARM设备。工具链的名称中有arm-linux-gnueabihf,这表示这是针对ARM硬浮点的交叉编译器。 接下来,用户提供的引用内容中有几个关键点需要注意: 1. 引用[1]和[2]提到了将工具链文件放到虚拟机任意目录,并下载该文件。这说明用户可能是在虚拟机环境中进行交叉编译的配置。 2. 引用[3]讨论了编译gcc时的一些注意事项,特别是关于静态库和glibc的依赖问题。用户可能需要处理库的链接问题,比如手动创建符号链接来解决依赖。 3. 引用[4]提到配置目标系统时,应该使用Linux而不是arm-linux,否则CMake无法正确识别系统类型,导致配置错误。此外,用户可能需要处理头文件缺失的问题,需要将本机的某些头文件复制到交叉编译工具链的include目录中。 现在回答用户的问题:安装这个特定版本的GCC Linaro工具链是否可行? 首先,检查该工具链的版本。用户提供的版本是4.7,发布于2013年。这个版本相对较旧,可能不支持较新的C++标准(如C++11、C++14等),并且可能存在兼容性问题,尤其是在与新版的内核或库配合使用时。不过,如果目标平台的环境也是基于较旧的系统(比如使用旧版内核或库的嵌入式设备),使用这个工具链可能是合适的。 其次,安装步骤方面,用户需要解压工具链到指定目录,并设置环境变量,如PATH,以便系统能找到交叉编译器的路径。例如,解压到/opt目录,然后将bin目录添加到PATH中。此外,可能需要设置其他环境变量,如CC、CXX等,来指定使用的编译器。 然后,需要考虑依赖库的问题。引用[3]提到编译时可能需要处理glibc的依赖,尤其是静态库和动态库的问题。如果工具链中的库版本与目标系统不一致,可能导致运行时错误。用户需要确保目标设备上的系统库与工具链兼容,或者在编译时静态链接必要的库。 关于CMake配置的问题,引用[4]指出,配置目标系统时应使用Linux,而不是arm-linux,这有助于CMake正确识别系统类型。此外,用户可能需要手动处理一些头文件的缺失,比如将本机的libv4l相关头文件复制到工具链的include目录下,以解决编译时的错误。 最后,验证安装是否成功。用户可以通过运行arm-linux-gnueabihf-gcc --version来检查编译器是否正确安装,并尝试编译一个简单的程序,如Hello World,然后将其传输到目标设备上运行,确认是否正常工作。 总结来说,安装该工具链是可行的,但需要注意版本较旧可能带来的限制,以及配置过程中可能遇到的依赖和路径问题。用户需要按照步骤正确设置环境,处理依赖库和头文件,并验证编译结果。</think>安装 $gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2$ 工具链是可行的,但需要注意以下关键步骤和限制条件: ### 一、可行性分析 1. **版本兼容性** - 该工具链发布于2013年,支持 ARMv7 硬浮点架构(hf 后缀) - 适用于较旧的嵌入式 Linux 系统(如基于 glibc 2.17 之前的系统) - 不支持 C++11 及更新标准(GCC 4.7 默认使用 C++98) 2. **文件完整性验证** ```bash md5sum gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 # 官方校验值需与下载文件匹配 ``` ### 二、安装流程 1. **解压工具链** ```bash sudo tar -xjf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 -C /opt ``` 2. **环境变量配置** ```bash echo 'export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 3. **验证安装** ```bash arm-linux-gnueabihf-gcc --version # 应输出 "gcc version 4.7.3 20130226 (prerelease)" ``` ### 三、特殊配置注意事项 1. **静态库依赖处理** 如遇 `libgcc_eh.a` 缺失错误,需手动创建符号链接: ```bash cd /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/arm-linux-gnueabihf/lib ln -s libgcc.a libgcc_eh.a ```[^3] 2. **CMake 配置要点** ```cmake set(CMAKE_SYSTEM_NAME Linux) # 必须配置为 Linux 而非 arm-linux[^4] set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) ``` 3. **视频开发头文件补全** 若出现 `libv4l` 头文件缺失,需从本机复制: ```bash cp /usr/include/libv4l*.h /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/arm-linux-gnueabihf/include/ ```[^4] ### 四、验证测试 1. **简单 C++ 测试程序** ```cpp // test.cpp #include <iostream> int main() { std::cout << "Cross-compile success!" << std::endl; return 0; } ``` 2. **交叉编译命令** ```bash arm-linux-gnueabihf-g++ test.cpp -o test -static-libstdc++ ``` 3. **目标平台验证** ```bash file test # 应显示 "ARM EABI5 version 1 (SYSV)" scp test user@target_device:/tmp ssh user@target_device "/tmp/test" ``` ### 五、替代方案建议 若目标平台使用较新内核(≥3.15)或需要 C++11 支持,推荐使用: - Linaro GCC 7.5:支持 ARMv7/ARMv8 架构 - 官方 ARM 工具链:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静思心远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值