为什么会写这个无聊的东西?
主要是老师让我们用 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