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 join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除