创建静态库和动态库

来源:互联网 发布:淘宝怎么隐藏待收货 编辑:程序博客网 时间:2024/06/03 18:47

今天是2014年5月25日。

首先我想说一下在LINUX操作系统中,如何查看进程和查看进程树。要想查看进程只需敲入ps -aux 即可,也可用 top指令,至于它俩的具体区别后面在介绍。用pstree 来查看进程树。这里面有子进程和父进程,一定要会看。

下来教你如何导出内核信息,和查看映像。基于刚才的ps -aux  确定你想要查看的进程(其实是它的PID)。然后用 cd  /proc   导出内核信息,在 cd/PID  之后   ls  查看存放进程信息,在用cat    maps  查看映像。这样你就可以清楚的看到每个变量和函数的一些存放位置了。

当你写好一段代码后,也许它有很多的 .c源文件。这时候我们就可以创建一个库来存放它。那么接下来我说说如何创建静态库和动态库:

1>如何创建一个静态库:

首先我们执行 gcc   -c   *.c    (这里的*.c是指所有的.c源程序),之后会生成 .o文件。然后用  ar  -rs  libname.a   *.o   (这里ar -rs 是创建静态库指令,lib是库标识,name是静态库的名字可以自定义, .a是静态库的后缀名)生成静态库后在用 gcc   .c     -L .      -lname (-L.是指在当前路径下找,若找不到则去  /urs/lib下去)    之后再  ./a.out    这样也可以得出正确的结果。

当然我们也可以把建立好 静态库移到  / urs/bin    (mv   libname.a    /usr/bin )即可,然后用gcc   .c       -lname      之后再  ./a.out  也同样可以。

2>如何创建一个动态库

首先我们执行 gcc   -c    -fPIC     *.c (-fPIC 表示与路径无关的(内存中))   (这里的*.c是指所有的.c源程序),之后会生成  .o文件。然后用  gcc    -shared     -o    libname.so   *.o  (-L.是指在当前路径下找,若找不到则去  /urs/lib下去)  (这里-shared  是创建动态库指令,lib是库标识,name是动态库的名字可以自定义, .so是动态库的后缀名)生成动态库后必须要把动态库移到  /usr/bin   下,否则在执行编译时无法链接,即找不到位置和内容。移到   /usr/lib       下之后在用 gcc   .c         -lname    之后再  ./a.out    这样也可以得出正确的结果。

下了我着重讲讲静态库和动态库的区别:首先,可以肯定的是静态库浪费空间,动态库浪费时间。静态库在程序编译时会被链接(拷贝)到目标代码中,程序运行时将不在需要该静态库。但是当动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入(指针),因此在程序运行时还需要动态库的存在。

无论静态库还是动态库都是由  .o文件创建的,当静态库和动态库同名时,gcc 命令优先选择动态库。

0 0
原创粉丝点击