Mess_GCC基本命令与链接库

2024-01-29 07:08
文章标签 命令 基本 gcc 链接库 mess

本文主要是介绍Mess_GCC基本命令与链接库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么会写这个无聊的东西?
主要是老师让我们用 Lex 做词法分析…
然后老师教程里给的 Lex.yy.c -> a.out 这一步是用 VC6.0 做的… 我又不想装 VC…
感觉为了做一个小实验装个软件太蠢…
我想,那行吧,趁着这个机会学学 gcc 手动编译怎么用?
参考:https://www.cnblogs.com/linuxAndMcu/p/11226900.html
https://www.cnblogs.com/lcchuguo/p/5164362.html
https://blog.csdn.net/sinat_36219858/article/details/80348889
https://www.cnblogs.com/king-lps/p/7757919.html

  • 什么是 mingw64 ?
    Minimalist GNU for Windows 64 大名鼎鼎的 gcc 编译器的 windows 版本
  • 编译过程中会产生的中间文件有哪一些?
// .c -----> .i -----> .s -------> .o --------> .exe/.out
//   预处理      编译        汇编         链接
  • gcc 的基本命令有哪些?
    基本的命令格式为 gcc [选项] [参数]
// 选项
// 无选项 .c -> .exe/.out,此时由于没有 -o 默认为 a.exe/a.out
// -E	.c -> .i 预处理
// -S 	.i -> .s 编译成汇编码
// -c	.s -> .o 汇编成机械码
// -o	.o -> .exe/.out	这个选项即可以和上面的选项一起使用用于指定目标文件名,也可以执行链接(其实就是一步到位的带参数版...)
// e.g: gcc test.o -o test 注意此时是没有后缀的,其他步骤都得加后缀,我猜测跟系统有关
// -I <dir>	在头文件的搜索目录添加 dir 目录
// -L <lib_dir> 在库文件的搜索目录添加 dir 目录
// -l<libname>	链接库文件

值得好好解释一下的是 -l 选项,它指示 GCC 去连接库文件 libfoo.so 。 Linux 下的库文件在命名时有一个约定,那就是应该以lib 三个字母开头,由于所有的库文件都遵循了同样的规范,因此在用-l 选项指定链接的库文件名时可以省去lib 三个字母,也就是说GCC 在对-lfoo 进行处理时,会自动去链接名为libfoo.so 。
Linux下的库文件分为两大类分别是动态链接库(通常以.so 结尾)和静态链接库(通常以.a 结尾),两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的 。默认情况下,GCC 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static 选项,强制使用静态链接库。

  • 什么是动态库,什么是静态库?
    静态库是在链接的时候进行链接的,动态库是在执行的时候才进行链接
    它们一个很大的不同就是,静态链接后库被删除了程序还能执行,而动态链接不行
  • 动态库与静态库的优缺点?
    上面那个问答可能会让你觉得动态库一无是处,其实不是的。静态链接之所以能够做到没有库也能运行程序,是因为库本身被嵌入到程序中了。
    这就带来了两个很大的问题
    浪费空间,因为可能不同的程序用着同一个库
    库出问题或者需要更新的时候,程序得重新编译
    动态库的缺点也是有的:

    虽然动态库也有着一些不足,但是在当今这个版本快速迭代的时代,链接还是用的动态库比较多
  • 如何编译时链接某个目录中的库?
    源文件中:#pragma commit(lib, "../Debug/libtest.lib(路径示范)")
    或?(这两件事只用做一件就可以了吧?我不确定…但是我是这么想的)
    编译器链接:gcc test.c -L <lib_dir> -l<libName> -o test
    https://blog.csdn.net/qq_33757398/article/details/81544087
  • 使用静态库的时候需要头文件吗?
    我觉得这取决于你写静态库的时候是把 函数的声明和实现是不是写在一起?
    像我们普通调用 C 语言的标准库的时候,因为标准库的库体中是只写了实现而没有写声明的,所以我们在链接的时候需要在源文件中加上它的声明(include);但是如果我们写静态库的时候将声明和实现放在了一起,那么我们直接链接库就可以了吧?
    https://zhidao.baidu.com/question/2271565000563520148.html
  • 静态库还有分类型的?
    一种静态库中有代码实现,用于直接作静态链接
    一种静态库中没有代码,类似头文件?用于调用动态库
    https://baike.baidu.com/item/lib/2395664?fr=aladdin

这篇关于Mess_GCC基本命令与链接库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656132

相关文章

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查