AIX环境下,调用动态库以及静态库

前提知识:

动态库后缀.so  静态库后缀.a

-c  只编译不链接

-o  指定输出名

-L 指定链接库的查找路径

-l 指定链接的库名

-I 文件里面包含了头文件,-I后面跟着查找头文件的路径

上面几项可以满足编译目标

生成.a文件

命令ar 

q:快速追加。增加新模块到库的结尾处

t 查看.a文件里面包含的成员

x 提取出.a文件里的成员,如果不指定提取的成员,将全部提取(注:不删除归档文件里的成员)

例:

G2DBT1:/wxp/so_a#ar t libhu.a
libhu.o
cmaps.o
sccsid.o
libhu_r.o
libhu32_r.o
libhu32.o

G2DBT1:/wxp/so_a#ar x libhu.a libhu.o
G2DBT1:/wxp/so_a#ls
libhu.a  libhu.o


d 删除模块中的成员

例:

G2DBT1:/wxp/so_a#ar d libhu.a libhu.o
G2DBT1:/wxp/so_a#ar t libhu.a
cmaps.o
sccsid.o
libhu_r.o
libhu32_r.o
libhu32.o

m 移动模块中成员的顺序,配合a(移动到指定成员的后面) b(移动到指定模块的前面) 来使用,如果不指定移动的位置,默认为最后面

G2DBT1:/wxp/so_a#ar -mb cmaps.o libhu.a libhu.o
G2DBT1:/wxp/so_a#ar t libhu.a
libhu.o
cmaps.o
sccsid.o
libhu_r.o
libhu32_r.o
libhu32.o

v  列出执行过程中的附加信息

据以上得出如果创建一个.a文件,命令如下:

/enpc/wxp/so_a$cc -c sayhello.c
/enpc/wxp/so_a$ls
hello.c     sayhello.c  sayhello.o
/enpc/wxp/so_a$ar -rv libhello.a sayhello.o
ar: Creating an archive file libhello.a.
a - sayhello.o
/enpc/wxp/so_a$ls
hello.c     libhello.a  sayhello.c  sayhello.o


函数调用.a的命令

/enpc/wxp/so_a$cc hello.c -L./ -lhello -o sayhello
/enpc/wxp/so_a$ls
hello.c     libhello.a  sayhello    sayhello.c  sayhello.o
/enpc/wxp/so_a$./sayhello
say hello
/enpc/wxp/so_a$ldd sayhello
sayhello needs:
         /usr/lib/libc.a(shr.o)
         /unix
         /usr/lib/libcrypt.a(shr.o)


ldd的命令里面居然没有libhello.a文件

静态文件,有没有或许都不重要!


生产一个动态文件:


使用makefile文件来生产静态库并调用成功


该文件还不是很成功

clean:
-rm *.o
-rm *.a

all:main.o libhello.a
cc -o all main.o -L./ -lhello
  
main.o:hello.c
cc -c hello.c -o main.o
  
libhello.a:sayhello.o
ar -rv libhello.a sayhello.o
  
sayhello.o:sayhello.c
cc -c sayhello.c -o sayhello.o

你可能感兴趣的:(linux)