首页 > 系统相关 >Linux编译器-gcc/g++使用

Linux编译器-gcc/g++使用

时间:2024-09-12 22:21:00浏览次数:3  
标签:gcc 编译 ++ 静态 编译器 static mycode 连接

1. 背景知识

1. 预处理(进行宏替换)

2. 编译(生成汇编)

3. 汇编(生成机器可识别代码)

4. 连接(生成可执行文件或库文件)

2. gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

编译(生成汇编)

汇编(生成机器可识别代码)

连接(生成可执行文件或库文件)

在这里涉及到一个重要的概念:函数库

函数库一般分为静态库和动态库两种。

自己总结

gcc mycode.c -0 mytest,后,./mytest就可以编译了,相当于把a.out重命名了

1、只进行预处理:gcc -E mycode.c -0 mycode.i,(预处理后干净的C语言)

2、变成汇编语言(编译)gcc -S mycode.i -o mycode.s(将汇编工作做完,就停下来)

3、汇编(生成机器可以识别代码)gcc -c mycode.s -o mycode.o,(mycode.o是目标文件,将会边工作做完,就停下来了),.obj文件,虽是二进制了,但不可以单独执行,需要经过连接才行。

4、连接,gcc mycode.o -o mytest后,再./mytest可以编译成功,连接过程将可重定位目标二进制和库进行连接形成可执行程序。键盘上的Esc方便记忆

.o和库是如何连接的?1、动静态连接

C语言静态库安装,sudo yum install -y glic-static livsbtdc++-static

gcc mycode.c -o mycode -static,静态连接,gcc默认用动态库,没有静态库,用不了static,-static本质:所以的连接都需要要求全部变为静态连接

动静态的优缺点:

动态库是因为共享库,可以有效节省资源(磁盘,内存,网络完全)等,一旦缺失,各个程序无法运行,静态库:不依赖库,程序可以独立运行,消耗资源,体积大

g++ mycode.cpp -o mycode -static -g(-g是用debug的意思,因为默认是release版本)

标签:gcc,编译,++,静态,编译器,static,mycode,连接
From: https://blog.csdn.net/2401_83427936/article/details/141758770

相关文章

  • C++创建与调用dll动态链接库
    C++创建与调用dll动态链接库(MinGW64Dev-C++)本文使用的是dev-c++,如果涉及到VC++中不一样的操作,也会适当进行区分。项目一:创建DLL1、创建一个DLL类型的项目,当前命名为dlltest,并选择合适的路径进行保存。 2、在生成的预设置代码中,加入如下代码//这是头文件dll.h#ifndef_D......
  • C/C++ 学生管理系统的文件读取与写入
    代码中文件读取函数read_file()存在一些问题,望指出.`#includeincludedefineSIZE100usingnamespacestd;staticintnums_stu=0;typedefstructStudent{char*name;char*ID; //占10个字符doublescore_one;doublescore_two;doublescore_three;doubletota......
  • C++中的基本运算符----逻辑运算符(&&、||、!)的实例讲解
    在C++中,逻辑运算符用于处理布尔值(true和false),并用于复合条件的判断。主要的逻辑运算符包括:目录1.逻辑与运算符(&&):2.逻辑或运算符(||):3.逻辑非运算符(!):1.逻辑与运算符(&&):当且仅当两个操作数都为true时,结果才为true。示例:if(a>0&&b>0)下面......
  • C++插件管理系统
    插件加载目录结构execute   plug.exe   plugify.dll   plugify.pconfig   res      cpp-lang-module.pmodule      example_plugin.pplugin      bin         cpp-lang-module.dll         exampl......
  • C++---string类常见接口
    介绍 string类详情===>>>https://cplusplus.com/reference/string/string/?kw=string1.string是表示字符串的字符串类(感觉就像一个动态的字符数组)2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3.string在底层实际是:basic_string模......
  • C++入门基础知识64——【关于 C+++数据抽象】
    成长路上不孤单......
  • C++音视频毕设项目计划书
    最近我经常收到私信,询问如何准备秋季招聘,以及学生阶段如何参与实习或进行小项目来提升自己的技能。我个人建议,找到相关行业的公司进行实习是个不错的选择。不过,自己也可以尝试做一些小项目,不断改进和优化,以提升动手能力。以下是一个音视频项目计划书,分享给大家:项目开发计划书:流媒......
  • C++读取命令行参数的学习(BOOST库)
    在c++工程中,经常需要通过命令行参数来获取程序运行所需要的信息。作者在实际工作中学习了Boost库,这里根据作者的理解,写了一个依托boost库完成命令行参数提取的程序模版,请大佬批评!!#defineOK0#defineExit-99//主程序#include<iostream>#include"XApp.h"intmain(int......
  • 题解 力扣 LeetCode 105 从前序与中序遍历序列构造二叉树 C/C++
    题目传送门:105.从前序与中序遍历序列构造二叉树-力扣(LeetCode)https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/每次在中序遍历序列片段中找到前序遍历序列队首,这是该层的根节点该位置左侧是左子树,右侧是右子树再......
  • C++面试题整理 1
    1.new和malloc什么区别?new和malloc都用于在堆上分配内存,new是c++中的关键字,分配内存后还会调用构造函数2.std中unorded_map,map,multimap有什么区别?unorderd_map中元素不按键值排序,底层数据结构是哈希表,相对map查询速度快,内存开销大map中元素按键值排序,底层数据结构是红黑......