gcc生成.a静态库和.so动态库文件o生成静态库的方法$gcc-cgdfontwu.c$gcc-cgdfontliu.c$gcc-cgdfontbin.c$arrclibgdfont.agdfontwu.ogdfontliu.ogdfontbin.o(ranliblibgdfont.a可生成索引)用nmlibgdfont.a来看里面的目标文件和导出函数(带T标记)。o生成动态库的方法$gcc-cgdfontwu.c$gcc-cgdfontliu.c$gcc-cgdfontbin.c$gcc-olibgdfont.so-shared-fPICgdfontwu.ogdfontliu.ogdfontbin.o-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程需要,而不能达到真正代码段共享的目的。可用nmlibgdfont.so来看里面导出的函数(带T标记)。用动态库的好处是:更新了动态库之后链结它的程序不用重新编译。o用法在websrv.c中:/*websrv.c*/#includegdfontwu.h#includegdfontliu.h#includegdfontbin.hintgetpng(){...gdImageChar(...,gdFontWu,...);gdImageChar(...,gdFontLiu,...);gdImageChar(...,gdFontBin,...);...return0;}静态库:$gcc-cwebsrv.c$gcc-owebsrvwebsrv.olibgdfont.a动态库:$gcc-owebsrvwebsrv.o-L.-lgdfont$LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH./websrvLD_LIBRARY_PATH=.:$LD_LIBRARY_PATHlddmain可以看到websrv程序所链结的动态库。把libgdfont.so放到/etc/ld.so.conf中列出的目录下就可以不用先指定环境变,注意先ldconfig刷新系统动态库的缓存还有一种ld-rpathdir这样的方法可避免设定环境变量