编译链接
文章平均质量分 93
Last-Week
正在学习C++的小弱鸡
展开
-
什么是静态链接
案例探索a.cextern int shared;int main(){ int a = 100; swap(&a, &shared);}b.cint shared = 1;void swap(int *a, int *b){ *a ^= *b ^= *a ^= *b;}gcc -c a.c b.c我们得到了a.o,b.o文件。b.c总共定义了两个全局符号,变量shared,函数swapa.c总共定义了一个全局符号,函数main原创 2022-04-23 22:56:33 · 349 阅读 · 0 评论 -
可执行文件的装载与进程
进程虚拟地址空间程序是一个静态概念,就是一些编译好的指令和数据集合的一个文件进程是一个动态概念,它是程序运行时的一个过程。比喻:程序是菜谱,CPU就是人,厨具就是其他硬件,整个炒菜过程就是一个进程一般来说,C语言指针大小的位数与虚拟空间的位数相同,32位平台下的指针为32位,即4字节;64位平台下的指针位8字节进程只能使用操作系统给它分配的空间,32位地址空间,进程只能使用3GB,剩余的供给操作系统使用。如果进程访问未经允许访问的空间,操作系统会捕获这些访问,并把这些行为当作非法操作,结束进程原创 2022-04-23 22:57:32 · 423 阅读 · 0 评论 -
目标文件有什么(ELF)
目标文件的格式目标文件:已经编译后的可执行文件格式,还没有经过链接的过程,其中可能有一些符号和地址没有调整。它跟可执行文件的内容与结构很相似,所以一般和可执行文件以同一种格式存储。现在PC平台流行的可执行文件格式主要是PE(Windows平台)和ELF(Linux平台)。动态链接库(Window的.dll和Linux的.so)和静态链接库(Windows的.lib和Linux的.a)文件也按照可执行文件格式存储静态链接库是把很多目标文件捆绑在一起形成一个文件ELF格式的文件原创 2022-04-23 22:55:55 · 2283 阅读 · 0 评论 -
生成hello可执行文件的步骤
从hello world开始下面我们通过一个简单的程序进入#include <stdio.h>#define PI 3.14int main(){ printf("hello world\n"); // hello world printf("%f", PI); return 0;}在Linux使用GCC来编译此程序gcc hello.c -o./a.out以上其实经历了四个步骤gcc -E hello.c -o hello.i //预原创 2022-04-23 22:54:27 · 2162 阅读 · 0 评论