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

相关文章

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大