编译构建工具链
文章平均质量分 96
从源码生成程序,需要经过配置、编译、链接等构建过程,掌握这些工具链能力,让我们的代码运行在更多的平台上。
Once-Day
软件工程师,编程爱好者,技术博客创作者,专注于嵌入式Linux C/C++领域,擅长高性能编程和疑难问题定位。二年MCU软件开发(智能小车),四年Linux软件开发(网关防火墙)。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++之《程序员自我修养》读书总结(12)
《程序员自我修养》读书总结(十二)探讨了系统调用与API的核心概念。系统调用是用户程序访问内核服务的唯一入口,Linux通过软中断(如int 0x80)或高效指令(sysenter)实现特权级切换。Windows则通过封装系统调用的Win32 API(如kernel32.dll)提供更稳定的接口。文章对比了两大系统的实现差异:Linux直接暴露系统调用(约300个),而Windows强调通过API间接调用内核服务。同时指出POSIX标准解决了跨平台兼容性问题,使应用程序获得源码级可移植性。通过分析文件读写、原创 2026-03-18 23:06:43 · 641 阅读 · 6 评论 -
C++之《程序员自我修养》读书总结(7)
《程序员自我修养》读书总结(七)探讨了动态链接的核心机制。静态链接会导致代码冗余和更新困难,而动态链接通过运行时符号解析实现资源共享。关键点包括:1)动态链接器在程序启动时加载共享对象并完成重定位;2)地址无关代码(PIC)通过相对寻址避免修改代码段;3)延迟绑定(PLT/GOT)机制将函数解析推迟到首次调用时,提升启动性能;4)ELF文件中.dynamic段保存依赖信息,.got和.plt段协作实现动态绑定。这些技术共同解决了静态链接的资源浪费问题,支持灵活的模块化架构。原创 2026-02-27 23:39:43 · 2130 阅读 · 23 评论 -
C++之《程序员自我修养》读书总结(6)
本文探讨了可执行文件与进程的关系,从程序装载到进程虚拟空间的构建过程。程序作为静态实体,通过操作系统映射为动态进程实例,一个程序可对应多个进程。现代系统采用页映射机制实现按需装载,利用虚拟内存技术提升内存利用率。文章分析了进程虚拟空间的布局原理,包括ELF文件的执行视图优化、段映射机制以及BSS段的零填充实现。通过操作系统视角,揭示了进程建立时的环境构建过程,包括页表初始化、按需调页等核心机制,展现了软硬件协同设计的精妙之处。原创 2026-02-27 23:34:34 · 808 阅读 · 2 评论 -
GCC编译(7)链接脚本LinkerScripts
本文介绍了GCC编译中的链接脚本(Linker Scripts)功能。链接脚本用于精确控制可执行文件的布局,定义代码、数据等内容的地址分布和加载策略。文章详细解析了链接脚本的基本概念、语法结构和常用命令。文章适用于需要精细控制内存布局的嵌入式开发场景,帮助开发者理解和使用链接脚本这一强大工具。原创 2026-02-25 23:37:12 · 1220 阅读 · 17 评论 -
C++之《程序员自我修养》读书总结(5)
《程序员自我修养》读书总结:Windows PE/COFF格式解析 本文深入探讨了Windows平台的核心二进制文件格式PE/COFF。主要内容包括: 发展历史:从Unix的COFF格式演变到Windows的PE格式,再到64位的PE32+扩展,保持兼容性的同时支持新特性。 mingw-w64工具链:介绍这套跨平台编译工具链的组成、用途和安装配置方法,支持在Linux/macOS上交叉编译Windows程序。 文件结构:详细解析PE文件的映像头和段表结构,包括_IMAGE_FILE_HEADER各字段含义,原创 2026-02-22 20:59:39 · 2029 阅读 · 3 评论 -
C++之《程序员自我修养》读书总结(4)
本文是《程序员自我修养》读书总结的第四部分,主要探讨静态链接的关键技术。内容包括空间和地址分配策略(相似段合并)、符号解析与重定位机制、COMMON块处理规则、C++特性支持(如模板实例化处理),以及静态库链接原理。文章详细分析了链接器如何通过两阶段处理(空间分配+符号解析)将分散目标文件组织为可执行映像,并深入讨论弱符号、函数级别链接、ABI兼容性等核心概念。通过具体示例和流程图,展现了从编译单元到最终二进制文件的转换过程。原创 2026-02-22 20:53:12 · 884 阅读 · 1 评论 -
GCC编译(6)静态库工具AR
本文介绍了GCC工具链中的AR(Archive)命令,主要用于创建、修改和提取静态库文件。文章概述了AR的基础使用场景,包括创建档案文件、查看内容、添加/删除成员等操作。重点解析了档案文件的本质特性:作为链接优化的二进制容器,其符号索引机制(armap)可显著提升链接效率。文章还对比了普通archive和thin archive的区别,前者完全拷贝对象文件适合发布,后者仅保存引用路径适合本地构建。最后详细列出了AR命令的参数说明和使用方法,帮助开发者高效管理静态库文件。原创 2026-02-20 11:40:46 · 2082 阅读 · 23 评论 -
GCC编译(5)头文件处理
本文主要介绍了GCC编译器处理头文件的相关技术和最佳实践。内容涵盖头文件预处理机制、编译规则、防止重复包含的方法、C/C++兼容性处理以及依赖关系生成等方面。重点讨论了预处理阶段宏展开和路径搜索策略,头文件定义与声明的规范使用,include guard和#pragma once的对比选择,跨语言接口设计中的extern "C"用法,以及构建系统中自动生成头文件依赖关系的技巧。文章通过具体示例和参数说明,为开发者提供了处理头文件相关问题的实用指导,有助于提高代码质量和构建效率。原创 2026-02-20 11:31:36 · 861 阅读 · 1 评论 -
GCC编译(4)构造和析构函数
本文探讨了GCC编译器中构造和析构函数的实现机制。从程序初始化视角分析了广义构造/析构过程,包括全局对象初始化、静态变量处理等。详细介绍了GCC特有的__attribute__((constructor))和__attribute__((destructor))属性,它们通过.init_array和.fini_array段实现函数自动调用。文章还解析了优先级控制、执行顺序等特性,并通过实例展示了从源码到ELF二进制文件的实现细节,包括符号表分析、段结构验证等,为理解程序启动和终止流程提供了技术参考。原创 2026-02-19 12:22:00 · 852 阅读 · 4 评论 -
GCC编译(3)常见编译选项
本文介绍了GCC编译器的常见编译选项及其功能。主要内容包括:基础控制选项(-c、-o、-E、-S、-v等)用于控制编译流程;优化选项(-O0~-O3、-Os、-flto等)调整编译优化级别;警告诊断选项(-Wall、-Wextra、-Werror等)提高代码质量;宏与头文件控制(-D、-I)影响预处理行为;链接选项(-L、-l、-static等)控制库链接方式;语言标准选项(-std)指定编译标准。文章还通过示例展示了各选项的具体应用场景,帮助开发者更高效地使用GCC进行代码构建和优化。原创 2026-02-19 11:48:10 · 1319 阅读 · 13 评论 -
GCC编译(2)C语言交叉编译
文章摘要: 本文介绍了GCC交叉编译C语言程序的基本方法。首先通过简单的多文件编译示例展示了增量编译的优势,详细讲解了Makefile的编写规则,包括变量定义、模式匹配和伪目标的使用。然后重点阐述了ARM平台交叉编译环境的搭建,包括工具链选择、Ubuntu系统下的安装配置方法,以及32位和64位编译器的使用示例。最后简要说明了本地与远程服务器之间的文件传输方法,为跨平台开发提供了完整的工具链指导。文章适合Linux环境下进行C语言开发和交叉编译的初学者参考。原创 2026-02-14 23:54:40 · 790 阅读 · 1 评论 -
GCC编译(1)入门概述
本文概述了GCC编译器的发展历程、编译流程和主要组件。GCC最初作为GNU C Compiler,逐步发展为支持多语言的GNU Compiler Collection。其编译流程分为预处理、编译、汇编和链接四个阶段,每个阶段由不同工具完成。文章详细介绍了各阶段的功能和对应命令,并列举了GCC的主要组件及其作用,包括c++、g++、gcj等语言驱动程序和libgcc、libstdc++等核心库。GCC的分阶段设计和模块化架构使其成为Linux系统重要的构建工具。原创 2026-02-14 23:43:04 · 947 阅读 · 1 评论 -
linux之crosstool-NG(1)生成toolchain
Crosstool-NG 是一款用于建立交叉编译器的开源工具。交叉编译器是一种特殊类型的编译器,可以在一种类型的计算机上(称为“主机”)为另一种类型的计算机(称为“目标”)生成可执行代码。这对于嵌入式系统开发者特别有用,他们需要在功能强大的主机上为资源受限的目标设备(如 ARM 或 MIPS 微控制器)生成代码。自定义构建: Crosstool-NG 允许用户选择他们想要的特定版本的 GCC,glibc 和 binutils,以及其他的库和工具。这意味着你可以根据项目需求创建一个精细调整的工具链。原创 2025-02-28 01:14:02 · 3880 阅读 · 52 评论 -
linux之autoconf(1)基础介绍
介绍Autoconf、automake等autotools工具的基本常识,以及如何在编译流程中的作用原创 2023-12-11 00:04:40 · 3938 阅读 · 0 评论 -
linux之buildroot(4)配置项目
介绍如何使用buildroot进行自定义项目,如何保存配置和添加自定义文件。原创 2023-12-03 23:54:16 · 4153 阅读 · 0 评论 -
linux之buildroot(3)配置软件包
本文介绍了buildroot常见的编译指令和软件包支持参数,以及如何集成到开发环境中使用。原创 2023-12-02 00:49:55 · 3570 阅读 · 0 评论 -
linux之buildroot(2)配置toolchain
buildroot提供两种toolchain使用方式,内部工具链和外部工具链,并且buildroot也支持生成toolchain sdk,用于构建新的交叉开发环境,这篇文章介绍了如何在buildroot使用toolchain以及生成定制的toolchain sdk。原创 2023-11-29 10:04:36 · 4863 阅读 · 0 评论 -
linux之buildroot(1)构建系统基础
Buildroot和Yocto是两种用于嵌入式Linux系统开发的工具,可以构建完整的根文件系统(root filesystem),包括内核、引导加载器和用户空间应用程序。Buildroot是一个简单、高效的嵌入式Linux系统构建工具,使用Makefile和Kconfig配置系统(与Linux内核相同)。Buildroot是高度可配置的,可以为各种目标板构建精简的Linux系统。它使用交叉编译,可以快速生成一个小型的、在目标硬件上运行的Linux系统。原创 2023-11-24 09:18:06 · 3867 阅读 · 0 评论
分享