【linux】编译器使用

目录

1. gcc ,g++ 编译器使用

a. 有关gcc的指令(g++同理)

2. .o 文件和库的链接方式

a. 链接方式

b. 动态库 和 静态库 优缺点对比

c. debug 版本 和 release 版本



1. gcc ,g++ 编译器使用

a. 有关gcc的指令(g++同理)

注意:

linux下自带gcc编译器,如果要安装g++编译器;

  • sudo yum install -y gcc-g++ (普通用户)

  • gcc + 文件名

得到可执行文件

  • gcc + 文件名 + -o + 自定义文件名

得到的可执行文件可以自己命名

  • gcc + E + 文件名 + -o + 自定义文件名 (一般以 .i 结尾)

得到预处理后的文件可以自己命名

注意:

-E 告诉编译器,从现在阶段开始执行完预处理阶段就可以停下来了

  • gcc -S + 文件名 + -o + 自定义文件名 (一般以 .s 结尾)

得到编译后的文件可以自己命名

注意:

-S 告诉编译器,从现在阶段开始执行完编译阶段就可以停下来了(得到的是汇编代码

  • gcc -c + 文件名 + -o + 自定义文件名 (一般以 .o 结尾)

得到汇编后的文件可以自己命名(得到的是二进制代码

注意:

  1. 得到的文件(可重定位目标二进制文件)不可以直接执行(缺少链接这一步
  2. 链接链接的是库文件 (Linux下:.so(动态库) .a(静态库),windows下:.dll(动态库),.lib(静态库))
  3. linux系统下,库有自己的命名规则:libname.so (红色标明的位置才是库的名字)
  4. 编译型语言,所谓的安装包,是安装了 头文件 + 库文件
  5. linux系统下,默认只安装了动态库,没有安装静态库
  6. 函数的实现就是调用了库文件,库文件就是源文件(.c)经过一定翻译后,形成的一个文件(可以打包多个源文件,也可以达到隐藏源文件的效果
  7. 头文件提供方法的声明,库文件提供方法的实现
  8. 头文件所处位置:/usr/include

2. .o 文件和库的链接方式

a. 链接方式

  1. 动态链接

动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序

  1. 静态链接

在编译器使用的时候,静态链接时,会将自己的函数拷贝到目标文件中,如果静态库缺失了,不会影响目标程序

注意:

  1. 在 Linux系统下,默认采用的链接是动态链接(需要提供动态库
  2. 动态库只能使用动态链接,静态库只能使用静态链接
  1. -static 选项

采用静态链接(需要提供静态库

注意:

  1. 安装 C语言 静态库(普通用户):
  • sudo yum install -y glibc-static

  1. 安装 C++ 静态库(普通用户)
  • sudo yum install -y libstdc++-static

  1. 如果只有动态库,没有静态库,-static 是不行的
  2. 如果没有动态库,只有静态库,那么只能用静态库 (本来编译器默认优先使用动态库,-static 是改变优先级,将所有的链接要求都改成静态链接,没有就会报错 )

b. 动态库 和 静态库 优缺点对比

  1. 动态库因为是共享库,可以节约资源(磁盘资源,内存资源,网络资源等)【优点】
  2. 动态库一旦缺失,目标程序很可能不能执行 【缺点】
  3. 静态库依赖小,缺失静态库不会对目标程序造成什么影响 【优点】
  4. 静态库体积大,资源消耗大 【缺点】

c. debug 版本 和 release 版本

注意:

  1. gcc 默认形成的可执行程序是以 release 版本发布出去的
  2. debug 版本 会比 release 版本 多加 debug 信息 ,所以体积上也会更大

  • gcc + 文件名 + -o + 目标文件名 + -g

形成的可执行文件是 debug版本 的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-创建型-抽象工厂模式-Abstract Factory

UML类图 工厂接口类 public interface ProductFactory {Phone phoneProduct();//生产手机Router routerProduct();//生产路由器 } 小米工厂实现类 public class XiaomiFactoryImpl implements ProductFactory {Overridepublic Phone phoneProduct() {return new XiaomiPhone…

Node.js -- fs模块

文章目录 1. 写入文件1.1 写入文件1.2 同步和异步1.3 文件追加写入1.4 流式写入1.5 文件写入的场景 2. 读取文件2.1 异步和同步读取2.2 读取文件应用场景2.3 流式读取2.4 fs 练习 -- 文件复制 3. 文件重命名和移动4. 文件删除5. 文件夹操作5.1 创建文件夹5.2 读取文件夹5.3 删除…

crossover和wine哪个好 wine和crossover有什么本质区别 苹果电脑运行Windows crossover24

CrossOver是Wine的延伸产品,CrossOver可以简单的理解为类虚拟机,那么wine是什么,许多小伙伴就可能有些一知半解。CrossOver和wine哪个好,wine和CrossOver有什么本质区别呢?下文将围绕着这两个问题展开。 一、CrossOve…

tcp inflight 守恒算法的几何解释

接上文:tcp inflight 守恒算法背后的哲学 在 tcp inflight 守恒算法正确性 中,E bw / srtt 的公平最优解是算出来的,如果自然可以用数学描述,那能算出来的东西反过来也一定能通过直感看出来,我倾向于用几何和力学描述…

力扣HOT100 - 199. 二叉树的右视图

解题思路&#xff1a; 相当于层序遍历&#xff0c;然后取每一层的最后一个节点。 class Solution {public List<Integer> rightSideView(TreeNode root) {if (root null) return new ArrayList<Integer>();Queue<TreeNode> queue new LinkedList<>…

Pushmall智能AI数字名片— —寻求商机合作的营销推广平台

Pushmall智能AI数字名片— —寻求商机合作的营销推广平台 开发计划 2024年2月开发计划&#xff1a; 1、优化名片注册、信息完善业务流程&#xff1b; 2、重构商机信息&#xff1a;供应信息、需求信息发布。 3、会员名片服务优化 4、企业名片&#xff1a;员工管理优化 5、CRM客…

【计算机网络】网络模型

OSI七层网络模型 七层模型如图所示 每层的概念和功能 物理层 职责&#xff1a;将数据以比特为单位&#xff0c;通过不同的传输介质将数据传输出去。 主要协议&#xff1a;物理媒介相关的协议&#xff0c;如RS232&#xff0c;V.35&#xff0c;以太网等。 数据链路层 职责&…

【WSL报错】执行:wsl --list --online;错误:0x80072ee7

【WSL报错】执行:wsl --list --online&#xff1b;错误:0x80072ee7 问题情况解决方法详细过程 问题情况 C:\Users\17569>wsl --list --online 错误: 0x80072ee7 解决方法 开系统代理&#xff0c;到外网即可修复&#xff01;&#xff01;&#xff01;&#xff01;&#x…

电商市场已饱和,各大平台都在卷价格?那是你不了解视频号小店

大家好&#xff0c;我是电商笨笨熊 现在做电商除了疯狂内卷就是疯狂内卷&#xff1b; 各大平台都是内卷价格&#xff0c;嘴上说着不想成为拼多多一样的平台&#xff0c;实际做的却是低价再低价&#xff0c;都希望能通过低价吸引用户提高转化&#xff1b; 因此现在很多玩家对…

第十四章大数据和数据科学4分

14.1 引言 14.1.3 科学理念 1.数据科学 数据科学将数据挖掘、统计分析和机器学习与数据集成整合&#xff0c;结合数据建模能力&#xff0c;去构建预测模型、探索数据内容模式。 数据科学依赖于&#xff1a; 1&#xff09;丰富的数据源。具有能够展示隐藏在组织或客户行为中不…

jpa分页插件对象Pageable出现了错误异常如何解决?

jpa分页插件对象Pageable出现了错误异常如何解决&#xff1f;&#xff01; 一般来说&#xff0c;遇到这种的错误异常情况&#xff0c;通常情况 下&#xff0c;都是因为程序员把传递的分页页码数字写错了。 正常情况下&#xff0c;分页页码起始数字应该是0&#xff1b;而不是1…

区块链钱包开发——专业区块链开发

随着区块链技术的发展&#xff0c;钱包开发成为了一项至关重要的任务。本文将探讨区块链钱包开发的重要性&#xff0c;分析当前面临的挑战&#xff0c;并展望未来的发展趋势。 一、区块链钱包概述 区块链钱包是一种用于存储和管理数字货币的软件工具。它为用户提供了一个安全的…

揭开ChatGPT面纱(2):OpenAI主类源码概览

文章目录 〇、使用OpenAI的两个步骤一、初始化方法__init__()1.源码2.参数解析 二、提供的接口1.源码2.接口说明主要接口说明 OpenAI版本1.6.1 〇、使用OpenAI的两个步骤 在上一篇博客中&#xff0c;我实现并运行了一个OpenAI的demo&#xff0c;我们可以发现&#xff0c;想要使…

Unity的旋转实现一些方法总结(案例:通过输入,玩家进行旋转移动)

目录 1. Transform.Rotate 方法 使用 2. Transform.rotation 或 Transform.localRotation 属性与四元数 使用方式&#xff1a; 小案例 &#xff1a;目标旋转角度计算&#xff1a;targetRotation&#xff08;Quaternion类型&#xff09; 玩家发现敌人位置&#xff0c;玩家…

ubuntu20 中设置桌面背景任务

1. 下载conky 使用 Conky 在 Ubuntu 中显示信息&#xff0c;例如你的阅读计划&#xff0c;可以分几个步骤来完成。Conky 是一款灵活的轻量级系统监视器&#xff0c;能够在桌面上显示各种信息。以下是基本的设置步骤&#xff1a; 安装 Conky 首先&#xff0c;你需要在 Ubuntu…

【学习记录】autoware标定相机与激光雷达外参

一、autoware选择 这里踩了好几个坑&#xff0c;首先autoware作为一个无人驾驶知名框架&#xff0c;其内部实际上是有两套标定的东西的&#xff0c;这一点绝大多数博客没有提到。其中最常用的是一个叫标定工具箱的东西&#xff0c;这个ros包已经在1.10往后的版本中被删掉了&am…

Spring 1、初识Spring

初识Spring 了解Spring家族了解Spring发展史Spring Framework系统架构学习路线 了解Spring家族 官网spring.io Spring形成了一种开发的生态圈&#xff0c;Spring提供了若干个项目&#xff0c;每个项目用于完成特定的功能。 Spring Framework&#xff08;最基础的东西&#x…

SpringCloud Alibaba--nacos配置中心

目录 一.基础介绍 1.1概念 1.2 功能 二.实现 2.1 依赖 2.2 新建配置文件 2.3 克隆 2.4 配置bootstap.yml文件 三.测试 一.基础介绍 1.1概念 在微服务架构中&#xff0c;配置中心就是统一管理各个微服务配置文件的服务。把传统的单体jar包拆分成多个微服务后&#xf…

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里&#xff0c;每一位开发工程师都如同一位探险家&#xff0c;不断地探索、挑战和成长。作为一名新入职的Java开发工程师&#xff0c;我面临着全新的技术栈和业务领域&#xff0c;这是一次跨越未知的征程&#xff0c;也是一次自我提升的机会。 新入职 初入公司…

低代码开发之腾讯云微搭工具

低代码开发之腾讯云微搭工具 微搭简介诞生缘由开发模式如何创建组件模块介绍实例讲解url传参级联联动使用事件其他方法调用数据源方法 callDataSource触发流程 callProcess 数据模型方法V2 微搭简介 微搭&#xff08;WeDa&#xff09;&#xff0c;全称是腾讯云微搭低代码开发平…