《深入理解计算机系统》之链接——实例
来源:互联网 发布:运营商云计算 编辑:程序博客网 时间:2024/05/23 14:40
编译链接小小的总结了一下,有以下4种,各自测试了一个实例,效果不错!
下面仅仅是列出了实例,没有具体阐述其中的含义,有兴趣的可以参考上一篇《深入理解计算机系统》之链接——读书笔记,里面解释了链接的一些基本概念,但是缺乏更深入的理解……
直接上代码——说明一切~
1.静态编译:
<span style="font-size:14px;">/*foo.c*/#include<stdio.h>void f(void) int x =2;int y =3; int main(){ f(); printf("x = 0x%x y = 0x%x \n", x,y); return0; }</span>
<span style="font-size:14px;">/*bar.c*/double x;void f(){ x =-0.0;}</span>
<span style="font-size:14px;">/*bar.c*/double x;void f(){ x =-0.0;}</span>
$:gcc -o foobar foo.c bar.c
$:./foobar
$:x = 0xx y = 0x80000000
2.与静态库连接
<span style="font-size:14px;">/*addvec.c*/void addvec(int*x,int*y,int*z,int n ){ int i; for(i =0; i < n; i++) z[i]= x[i]+ y[i];}/*multvec.c*/void multvec(int*x,int*y,int*z,int n){ int i; for(i =0; i < n; i++) z[i]= x[i]*y[i];}/*vector.h*/void addvec(int*x,int*y,int*z,int n );void multvec(int*x,int*y,int*z,int n); /*main2.c*/#include<stdio.h>#include"vector.h"int x[2]={1,2};int y[2]={3,4};int z[2];int main(){ addvec(x,y,z,2); printf("z = [%d %d]\n",z[0], z[1]); return0;}</span>
$:gcc –c addvec.c multvec.c
$:ar rcs libvector.a addvec.o multvec.o
$:gcc –o2 –c main2.c
$:gcc –static -0 p2 main2.o ./libvector.a
3动态链接共享库
$:gcc -shared -fPIC -o libvector.so addvec.c multvec.c
$:gcc -o p2 main2.c ./libvector.so
$:./p2
4从应用程序中加载和链接共享库
<span style="font-size:14px;">/*dll.c*/#include<stdio.h>#include<stdlib.h>#include<dlfcn.h>int x[2]={1,2};int y[2]={3,4};int z[2];int main(){ void*handle; void(*addvec)(int*,int*,int*,int); char*error; handle = dlopen("./libvector.so",RTLD_LAZY);//加载和链接共享库 if(!handle){ fprintf(stderr,"%s\n",dlerror()); exit(1); } addvec = dlsym(handle,"addvec");//函数的输入是前面已经打开共享库的句柄和一个符号名字 if((error = dlerror())!= NULL){ fprintf(stderr,"%s\n",error); exit(1); } addvec(x,y,z,2); printf("z = [%d %d]\n",z[0],z[1]); if(dlclose(handle <0)){//卸载共享库 fprintf(stderr,"%s\n",dlerror()); exit(1); } return0;}</span>
$:gcc -shared -fPIC -o libvector.so addvec.c multvec.c
$:gcc -rdynamic -o2 -o p3 dll.c -ldl
$:./p3
0 0
- 《深入理解计算机系统》之链接——实例
- 《深入理解计算机系统》之链接——读书笔记
- 深入理解计算机系统之链接
- 深入理解计算机系统——链接
- 《深入理解计算机系统》链接之符号表
- 深入理解计算机系统-----之 第七章 链接
- 深入理解计算机系统之链接(二)
- 深入理解计算机系统之链接(一)
- 深入理解计算机系统之链接(三)
- 《深入理解计算机系统》--链接
- 深入理解计算机系统:链接
- 深入理解计算机系统 链接
- 《深入理解计算机系统》——第7章(链接)
- 《深入理解计算机系统》读书笔记——第七章 链接
- 《深入理解计算机系统》——计算机系统漫游
- 链接 读深入理解计算机系统
- 《深入理解计算机系统》链接技术
- 1 深入理解计算机系统之计算机系统漫游
- OpenCV------创建Trackbar & 图像对比度、亮度值调整
- 总结之栈和队列
- 获取两点(经纬度表示)间距离
- OutOfMemoryException异常
- LazyImgv1.0图片延迟加载插件
- 《深入理解计算机系统》之链接——实例
- LeetCode: Remove Element
- Android数据库高手秘籍(一)——SQLite命令
- golang中的use-a和has-a
- NYOJ 题目63小猴子下落
- 【Android 一般进阶】ListView滑动到顶部smoothScrollToPosition
- oracle的正则表达式
- C++易混知识点3. New Operator, Operator New, Placement New 实例分析,比较区别
- 加载由mxml生成的swf,并访问内部方法