关于gcc的一些笔记。
gcc/g++是一个编译器。
预处理:头文件展开、条件编译、宏替换、去注释
编译:C语言汇编语言
汇编:汇编->可重定位目标二进制文件,不可以被执行,bin.obj,只把我们的代码进行翻译形成二进制目标文件
链接:将我们自己形成的.obj文件和库文件进行合并,形成可执行程序。
ESc iso
gcc -o 生成文件名称 源文件
-E 从现在开始进行程序的翻译,但做完预处理后结束 myfile.i
-S 从现在开始进行程序的翻译,做完编译后停下来 myfile.s
-c 从现在开始进行程序的汇编,做完汇编后停下来 myfile.o
我们为什么能在Linux下进行C、C++代码的编写和编译?
答:Linux系统默认已经携带了语言级别的头文件和语言对应的库。
库分为动态库和静态库,本质上库也是文件。
静态库:libxxxxx.a
动态库:libxxxxx.so
区别库时把前缀和后缀去掉,中间的内容就是名字
windows下静态库为.lib文件,动态库为.dll文件
在我们安装VS2022/2019时,重要的一个工作就是下载对应的头文件和库文件!
我们所使用的指令有相当一部分是使用C写的!如何看待指令呢?指令就是程序、工具。
云服务器安装的Linux大多默认为动态链接,静态链接安装指令:yum install glibc-static libstdc+±static -y
假如我们是程序,当我们需要电脑时,可以选择去网吧(动态库),需要记住网吧(动态库)地址,也可以自己买一台电脑回家(静态库),要花(内存)买回家。
makefile是围绕依赖关系和依赖方法构建的一个自动化编译工具。
依赖关系与依赖方法
make:myfile.o
gcc -c -o myfile myfile.s
make:myfile.s
gcc -S -o myfile.s myfile.i
make:myfile.i
gcc -E -o myfile.i myfile.c
执行顺序类似“栈”,是根据依赖关系来寻找所需要的文件的
makefile:test.c
gcc -o test test.c
!PHONY:clean
clean:
rm -f test
添加信任用户
/etc/sudoers