1985五角大硬币多少钱:生成库

来源:百度文库 编辑:中财网 时间:2024/05/05 22:07:15
生成库
第一步要把源代码编绎成目标代码。以下面的代码为例,生成上面用到的hello库:
/* hello.c */ #include void sayhello() { printf("hello,world "); }
用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等: gcc -c hello.c -o hello.o
1.连接成静态库 连接成静态库使用ar命令,其实ar是archive的意思 $ar cqs libhello.a hello.o
2.连接成动态库 生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号: $gcc -shared
-Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o 另外再建立两个符号连接: $ln
-s libhello.so.1.0 libhello.so.1 $ln -s libhello.so.1 libhello.so
这样一个libhello的动态连接库就生成了。最重要的是传gcc -shared 参数使其生成是动态库而不是普通执行程序。 -Wl
表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正
在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有
soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。
这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同 libxxxx.so.major.minor
其中,xxxx是库的名字,major是主版本号,minor 是次版本号
总结
通过对LINUX库工作的分析,我们已经可以理解程序运行时如何去别的地方寻找“库”,在下一篇文章中我继续研究可执行程序的执行过程,这两天在写一个服务器上的脚本,快成功了。花在Linux上的时间明显少了点,等过两天把这个小程序开发完毕以后马上转回正行。