IBMUNIX下C语言库的运用注:各个具体的UNIX(LINUX)环境下对动态库、静态库的使用有部分不同,这一个文档只是针对IBM平台的AIX环境下的库的使用。1.静态库1.1.直接用程序实现1.1.1.编辑源代码[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathelloworld.c#includestdio.hintmain(){printf(Helloworld.\n);return0;}1.1.2.编译cc-ohelloworldhelloworld.c注:cc是编译器,如:xlc、xlC、gcc、g++等,不同的UNIX平台,可能有不同的编译器。-o是编译器的参数,编译可以有很多参数,这里-o是指生成的目标文件是什么。Helloworld是可执行程序名,是跟在-o之后的。1.1.3.执行[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$helloworldHelloworld.1.2.用静态库实现1.2.1.编辑源代码1.2.1.1.主程序#includestdio.h#includehw.hintmain(){printf(main:Helloworld.\n);hw();return0;}1.2.1.2.静态库程序头文件[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathw.h#ifndefHW_H#defineHW_Hinthw();#endif注:头文件不是必须的,但是为了共享方便,最好是用头文件,如果一个静态库中有多个函数,用头文件会比较方便,如果不用头文件,则容易出错,不好实际操作。程序[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathw.c#includestdio.h#includehw.hinthw(){printf(hw():Helloworld.\n);return0;}1.2.2.编译cc-chw.c--生成hw.o注:--cc是编译器---c是cc的参数,表示是进行程序编译工作,自动生成hw.o文件;也可以通过-o参数生成一个指定的目标文件。[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$ar-v-rlibhw.ahw.o注:ar是静态库的维护命令,-v–r是参数,分别是校验和替换,详情请参考系统的man的说明。在上述命令中,指出生成libhw.a静态库,也可以指定其它名,但是必须是lib为前缀,“.o”为后缀。--ar:Creatinganarchivefilelibhw.a.--a-hw.occ-ohelloworldhelloworld.c-lhw-L./注:CC、-o不再解释;-l是CC的参数,指明生成可执行文件时,要连接的静态库的名称没有前缀、后缀。在这里是libhw.a-L是CC的参数,指明静态连接库的搜索路径,在本例“./”是指在当前路径搜索。1.2.3.执行[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$helloworldmain:Helloworld.hw():Helloworld.注:生成可执行文件后,可以直接运行,现在生成libhw.a文件,也不影响程序的执行。2.动态库2.1.直接实现2.1.1.编辑源代码[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathelloworld.c#includestdio.hintmain(){printf(Helloworld.\n);return0;}2.1.2.编译cc-ohelloworldhelloworld.c2.1.3.运行[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$helloworldHelloworld.2.2.用动态库实现2.2.1.编辑源代码1)头文件[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathw.h#ifndefHW_H#defineHW_hinthw();#endif2)动态库源代码文件[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathw.c#includehw.h#includestdio.hinthw(){printf(HW():Helloworld.\n);return0;}3)主程序源代码文件[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$cathelloworld.c#includestdio.h#includehw.hintmain(){printf(Helloworld.\n);hw();return0;}2.2.2.编译1)编译动态库文件cc-chw.c注:编译生成hw.o文件。-c是参数。2)编译生成动态库cc-G-olibhw.sohw.o注:-G是参数,是用来生成动态连接库的。-o是用来指定目标文件名的。hw.o是源目标文件。3)编译生成可执行文件cc-ohelloworldhelloworld.clibhw.so-L.2.2.3.执行[billing_yn@lpar3:/ngboss/billing_yn/user/pdy]$./helloworldHelloworld.HW():Helloworld.注:执行时,如果libhw.so被删除后,再执行helloworld则会报错;重新生成libhw.so后,不需要重新编译,则可以重新执行hellloworld,这方面和静态连接库不同,大家可以试一下。也可以修改lihso.so的输出内容,重新编译动态连接库后,则输出会不同,大家可以试一下。还有libhw.so一定要放置到指定的位置,如果不放置在指定位置,则系统也会报错。