6.9.1、自制动态链接库:<1>动态链接库的后缀名是.so(对应windows系统中的dll),静态库的扩展名是.a .
<2>第一步:创建一个动态链接库。 gcc aston.c -o aston.o -c -fPIC (-fPIC表示设置位置无关码)
gcc -o libaston.so aston.o -shared (-shared表示使用共享库)
注意:做库的人给用库的人发布库时,发布libxxx.so和xxx.h即可。
第二步:使用自己创建的共享库。gcc cdw.c -o cdw -lmax.so -L ./动态链接库 -I ./动态链接库
第三步:上述编译成功了,但是在 ./cdw 执行时会报错,原因是采用动态链接,在可执行文件只是做了一个标记,标记是使用了哪个函数库的哪个函数。
并没有将库函数加载到源文件中,所以可执行文件很小,在执行时,需要立即从系统里面找到使用到的函数库,然后加载到内存中,在linux系统中
默认是从 /usr/bin 中寻找,(不确定:如果使用shell中运行)会先执行环境变量的路径然后再查找 /usr/bin;所以我们可以用两种办法解决运行的问题
第四步:将动态库 libmax.so 复制到 /usr/lib 下面,但是如果以后所有的库都这样放的话,会越来越臃肿,导致运行速度变慢(一个一个查找);或者是新添加一个环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/share/include (将库 libmax.so 复制到这个路径下面)这样就可以运行了。
<3>使用 ldd 命令判断一个可执行文件是否能运行成功; ldd cdw
linux-gate.so.1 => (0xb77a8000)
libmax.so => not found //发现 not found意思就是没有找到对应的函数库
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e2000)
/lib/ld-linux.so.2 (0xb77a9000)
}
七、存储类&作用域&生命周期&链接属性(7.2 ?虚拟地址技术?)
{
7.1、概念词:存储类(栈、堆、数据区、.bss段、.text段)
作用域(代码块作用范围,也就是变量作用的范围)
生命周期(变量的诞生和死亡)
链接属性(外链接属性、内链接属性、无连接属性)
7.2、Linux下的内存映射(分配情况、组织情况):见图内存映射。其中有关进程的空间,如进程控制块、页表等都是在内核里面的。文件区是映射外部文件的,如打开记事本,那么这个文件临时

存放在文件区域。(见引用资料)
问题:虚拟地址技术? 解决:后期在Linux应用/网络编程会讲。
OS下和裸机下C程序加载执行的差异? 解决:在arm裸机第十六部分有介绍。
7.3、存储类关键字:<1> auto 自动的(一个用法:修饰局部变量,在定义变量时可以省略) 【外链接:与第二个c文件链接】【内链接:只与本c文件链接】【无连接:就是无链接】
<2> static 静态的(有两个用法,第一个是修饰局部变量,意思是当作全局变量,存放在数据区,作用域只是定义的那个函数范围,生命周期和整个程序一样,属于无连接
第二个是修改全局变量/函数,意思是这个全局变量/函数只在当前c文件有效,其他c文件是不能使用它的,属于内链接,普通全局变量属于外连接)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33816-12.html
完全物质化的叫兽
日本军舰击中定远镇远数百发炮弹
就你这智商也学人借打假之名来坑人
是哪个银行的