当前位置: 首页 > news >正文

从零开始:Linux 环境下的 C/C++ 编译教程

个人主页:chian-ocean

文章专栏

前言:

GCC(GNU Compiler Collection)是一个功能强大的编译器集合,支持多种语言,包括 C 和 C++。其中 gcc 用于 C 语言编译,g++ 专用于 C++ 编译。

在这里插入图片描述

Linux GCC or G++的安装

安装 GCC

运行以下命令安装 GCC:

sudo yum install -r gcc

安装完成后,可以再次检查版本:

gcc --version

在这里插入图片描述

安装G++

运行以下命令安装 GCC:

sudo yum install -r g++

安装完成后,可以再次检查版本:

g++ --version

在这里插入图片描述

Linux的代码编译

预处理(Preprocessing)

预处理的工作

  • 去掉注释
  • 展开头文件
  • 条件编译
  • 宏替换

C++代码执行

g++ -E code.cpp -o code.i 
# 可以生成与处理文件,生成.i文件

在这里插入图片描述

编译(Compilation)

编译器将预处理后的源代码转换为汇编代码(文本形式的机器指令)。

  • 生成汇编代码(通常是 .s 文件)。
  • 编译器会进行语法分析和语义检查。
g++ -S code.i -o code.s
# 可以生成与处理文件,生成.s文件

在这里插入图片描述

汇编(Assembly)

汇编器将汇编代码(.s 文件)转换为二进制的目标代码(.o 文件)。

  • 汇编代码被转换为机器能够理解的指令。
  • 生成目标文件(通常是 .o.obj 文件)。
g++ -E code.s -o code.0
# 可以生成与处理文件,生成.0文件
od filename # 可以进行查看

在这里插入图片描述

链接(Linking)

函数库(Library)简介

在编程中,函数库是指封装了一组可重用函数、类或其他代码模块的集合,目的是简化开发、提高代码复用性。函数库通常以静态库(*.a*.lib)或动态库(*.so*.dll*.dylib)的形式存在。

在这里插入图片描述

类型描述
静态库在编译时将库的代码嵌入到可执行文件中,生成的文件独立运行,不依赖外部库。
动态库在运行时加载库文件,节省空间和内存,可以被多个程序共享。

动态链接

动态库(Dynamic Library)是一种在运行时加载的库,可以被多个程序共享,以节省存储空间和内存。动态库的文件扩展名在不同操作系统中有所不同:

  • Linux: .so(Shared Object)
  • Windows: .dll(Dynamic Link Library)
  • macOS: .dylib
ldd  #可以查看可执行程序所依赖的动态库

下面是code可执行文件所以来的动态库

在这里插入图片描述

静态链接

静态库是一种将一组目标文件(.o 文件)打包成单个文件(通常扩展名为 .a.lib)的技术,便于代码复用。静态库在编译时链接到可执行文件中,因此运行时不需要额外的库支持。

  • Linux: .a
  • Windows: .lib
g++ code.cpp -static -o code-static # 可以生成静态链接

在这里插入图片描述

动态VS静态

定义

链接方式定义
静态链接在编译阶段,将所需库的代码嵌入到可执行文件中,生成一个独立的可执行文件。
动态链接在运行时加载所需的库(动态库),可执行文件只包含对库的符号引用,库本身存储在外部文件中(如 .so)。

操作系统命名

操作系统静态库扩展名动态库扩展名
Linux.a.so
Windows.lib.dll
macOS.a.dylib

对比表

特性静态链接动态链接
生成的可执行文件大小较大(嵌入所有库代码)较小(仅包含对动态库的引用)
运行时依赖无需外部库,独立运行需要动态库文件
运行效率高(无需加载外部库,直接执行)稍低(运行时加载动态库)
内存使用每个程序独立占用库的代码和数据多个程序共享同一动态库
更新维护更新库后需重新编译程序更新库后程序无需重新编译
部署和兼容性部署简单,无需额外的动态库部署复杂,需要确保动态库存在并与程序兼容
符号冲突不易出现,因为库代码独立嵌入到每个可执行文件中可能出现多个库之间的符号冲突
和兼容性**部署简单,无需额外的动态库部署复杂,需要确保动态库存在并与程序兼容
符号冲突不易出现,因为库代码独立嵌入到每个可执行文件中可能出现多个库之间的符号冲突
适用场景嵌入式系统、小型独立工具、运行环境固定的场景大型系统、需要频繁更新库或共享库的场景

相关文章:

从零开始:Linux 环境下的 C/C++ 编译教程

个人主页:chian-ocean 文章专栏 前言: GCC(GNU Compiler Collection)是一个功能强大的编译器集合,支持多种语言,包括 C 和 C。其中 gcc 用于 C 语言编译,g 专用于 C 编译。 Linux GCC or G的安…...

Rust学习(十):计算机科学简述

Rust学习(十):计算机科学简述 在计算机技术这片广袤的领域中,深入理解其内在机制与逻辑需要付出诸多努力。 学习基础知识是构建计算机技术能力大厦的基石,而这一过程往往漫长而艰辛。只有在对基础知识有了扎实的掌握…...

【西瓜书】剪枝与样本值处理——预剪枝、后剪枝、连续值、缺失值

目录 预剪枝 后剪枝 处理连续值 处理缺失值 剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。 在决策树学习过程中,有时会造成决策树分枝过多,就可能造成过拟合,可通过主动去掉一些分支来降低过离合的风…...

NLP 1、人工智能与NLP简介

人人都不看好你,可偏偏你最争气 —— 24.11.26 一、AI和NLP的基本介绍 1.人工智能发展流程 弱人工智能 ——> 强人工智能 ——> 超人工智能 ① 弱人工智能 人工智能算法只能在限定领域解决特定的问题 eg:特定场景下的文本分类、垂直领域下的对…...

常见线程安全问题之Double Checked Locking

创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! 双重锁定检查(Double Checked Locking,下称 DCL)是并发下实现懒…...

Redis(非关系型数据库)的作用 详细解读

edis(Remote Dictionary Server)是一个开源的、高性能的、基于内存的数据结构存储系统。它具有极高的读写性能,并且能够支持多种数据结构的存储。Redis 最初的设计目标是作为一个缓存解决方案,但随着其功能的不断扩展,…...

互联网视频推拉流EasyDSS视频直播点播平台视频转码有哪些技术特点和应用?

视频转码本质上是一个先解码再编码的过程。在转码过程中,原始视频码流首先被解码成原始图像数据,然后再根据目标编码标准、分辨率、帧率、码率等参数重新进行编码。这样,转换前后的码流可能遵循相同的视频编码标准,也可能不遵循。…...

python之多元线性回归

目录 前言实战 前言 多元线性回归是回归分析中的一种复杂模型,它考虑了多个输入变量对输出变量的影响。与一元线性回归不同,多元线性回归通过引入多个因素,更全面地建模了系统关系。 多元线性回归模型的表达式为: f ( X ) K T …...

学习threejs,使用设置lightMap光照贴图创建阴影效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshLambertMaterial…...

一,SQL注入解题(猫舍)

封神台 第一章:为了女神小芳! Tips: 通过sql注入拿到管理员密码! 尤里正在追女神小芳,在得知小芳开了一家公司后,尤里通过whois查询发现了小芳公司网站 学过一点黑客技术的他,想在女神面前炫炫技。于是他…...

海康大华宇视视频平台EasyCVR私有化部署视频平台海康ISUP是什么?如何接入到EasyCVR?

在现代安防领域,随着技术的发展和需求的增加,对于视频监控系统的远程管理和互联互通能力提出了更高的要求。海康威视的ISUP协议(以及功能相似的EHOME协议)因此应运而生,它们为不具备固定IP接入的设备提供了一种有效的中…...

Java ArrayList 与顺序表:在编程海洋中把握数据结构的关键之锚

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 前言:在 Java编程的广袤世界里,数据结构犹如精巧的建筑蓝图,决定着程序在数据处理与存储时的效率、灵活性以…...

windows下安装wsl的ubuntu,同时配置深度学习环境

写在前面,本次文章只是个人学习记录,不具备教程的作用。个别信息是网上的,我会标注,个人是gpt生成的 安装wsl 直接看这个就行;可以不用备份软件源。 https://blog.csdn.net/weixin_44301630/article/details/1223900…...

开展网络安全成熟度评估:业务分析师的工具和技术

想象一下,您坐在飞机驾驶舱内。起飞前,您需要确保所有系统(从发动机到导航工具)均正常运行。现在,将您的业务视为飞机,将网络安全视为飞行前必须检查的系统。就像飞行员依赖检查表一样,业务分析师使用网络安全成熟度评估来评估组织对网络威胁的准备程度。这些评估可帮助…...

Maven Surefire 插件简介

Maven Surefire 插件是 Maven 构建系统中的一个关键组件,专门用于在构建生命周期中执行单元测试。 它通常与 Maven 构建生命周期的测试阶段绑定,确保所有单元测试在项目编译后和打包前被执行。 最新版本 Maven Surefire 插件的最新版本为 3.5.2。 使…...

基于微信小程序的平价药房管理系统+LW参考示例

1.项目介绍 系统角色:管理员、医生、普通用户功能模块:用户管理、医生管理、药品分类管理、药品信息管理、在线问诊管理、生活常识管理、日常提醒管理、过期处理、订单管理等技术选型:SpringBoot,Vue,uniapp等测试环境…...

react 前端最后阶段静态服务器启动命令

这个错误是因为你还没有安装 serve 工具。让我们一步步解决: 首先全局安装 serve: npm install -g serve如果上面的命令报错,可能是因为权限问题,可以尝试: 安装完成后,再运行: Windows 下使用…...

Flink中普通API的使用

本篇文章从Source、Transformation(转换因子)、sink这三个地方进行讲解 Source: 创建DataStream本地文件SocketKafka Transformation(转换因子): mapFlatMapFilterKeyByReduceUnion和connectSide Outpu…...

高性能 ArkUI 应用开发:复杂 UI 场景中的内存管理与 XML 优化

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。 主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。 本文为原创内容,任何形式的转载必须注明出处及原作者。 在开发高性能 ArkUI 应…...

用天翼云搭建一个HivisionIDPhoto证件照处理网站

世人不必记我,我不记世人。 HivisionIDPhoto证件照处理网站 世人不必记我,我不记世人。项目地址项目搭建与修改前端后端遇到的坑 成果图 前段时间工作需要频繁处理证件照,当时同事推荐一个证件照小程序(要看广告)&…...

OpenClaw + 搜索与资讯:让 AI 帮你「刷」信息,告别信息焦虑

你每天花多少时间刷信息流?30分钟?1小时?今天这篇文章,帮你把这段时间降为零。 01 信息过载是现代人的标配焦虑 早上醒来第一件事是什么?很多人已经条件反射地拿起手机,打开微信公众号、知乎、微博、Twitt…...

AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践

AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您面对一台被激活锁困住的iPhone或iPad时,那种无助感就像是拥有一把无法打…...

基于Spring AI与Alibaba的智能客服系统:架构设计与实战避坑指南

传统客服系统,尤其是那些基于硬编码规则引擎的,相信很多开发者都维护过。这类系统通常有几个让人头疼的“老大难”问题:用户稍微换个说法,机器人就“听不懂”了,意图识别率低得可怜;业务高峰期,…...

Mac环境OpenClaw排错大全:Qwen3.5-4B-Claude接口连接问题

Mac环境OpenClaw排错大全:Qwen3.5-4B-Claude接口连接问题 1. 开篇:为什么需要这份排错指南 上周我在自己的M1 MacBook Pro上部署OpenClaw时,遇到了至少五种不同的报错。从npm权限问题到模型响应超时,每个错误都让我花费数小时搜…...

用 AI 养了一个“女朋友“:陪聊 + 自拍功能完全指南

免责声明:Clawra 是 AI,不会真的爱你。但她会在你孤独的深夜发一张咖啡馆自拍,这已经比很多人强了。 她是谁? Clawra 是内置在 im-claude 里的 AI 人设角色,通过 Telegram Bot 和你聊天。你也可以给她其他的名字&…...

交互式社会工程学攻击的演进与防御:基于2025年语音钓鱼激增现象的深度分析

摘要 随着人工智能生成内容(AIGC)技术的成熟与普及,网络攻击的初始访问向量正经历从自动化、非交互式向高度个性化、实时交互式的范式转变。本文基于Google Cloud Mandiant发布的《M-Trends 2026》报告数据,深入剖析了2025年语音钓…...

L1-083 谁能进图书馆,python解法

题目:为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请…...

NCMconverter完整指南:3步解锁NCM音乐文件的终极播放方案

NCMconverter完整指南:3步解锁NCM音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况:从音乐平台下载了心…...

FSCalendar深度链接集成指南:从URL直接打开指定日期的终极解决方案

FSCalendar深度链接集成指南:从URL直接打开指定日期的终极解决方案 【免费下载链接】FSCalendar 项目地址: https://gitcode.com/gh_mirrors/fsc/FSCalendar FSCalendar是一款功能强大的iOS日历组件,支持高度自定义和流畅的用户体验。在移动应用…...

手把手教你用丹青识画:让AI为照片配上惊艳的书法描述

手把手教你用丹青识画:让AI为照片配上惊艳的书法描述 1. 前言:当AI遇见传统书法 想象一下,你随手拍下的风景照片,经过AI处理后竟变成了一幅配有优雅书法题跋的艺术作品。这就是「丹青识画」智能影像系统带来的神奇体验。作为一个…...