linux下,动态库和静态库的编译方法(实例说明)

《一日二十四挨踢www.1024it.net》站文章在未特殊说明下默认为原创性文章。

在未有正式书面授权情况下,请勿转载。谢谢配合



示例源码,这里用hello.h,hello.c,main.c 三个文件来演示:

robin@ubuntu:~/workspace/1024it.net$ cat hello.h 
#ifndef __HELLO_H__
#define __HELLO_H__

void sayHello();
#endif // #ifndef __HELLO_H__

robin@ubuntu:~/workspace/1024it.net$ cat hello.c 
/***************************************************
* Author: Robin
* Mail: [email protected]
* Description:
***************************************************/

#include <stdio.h>

void sayHello(){
    printf("Hello!!!\t一日二十四挨踢(www.1024it.net)\n");
}
robin@ubuntu:~/workspace/1024it.net$ cat main.c 
/***************************************************
* Author: Robin
* Mail: [email protected]
* Description:
***************************************************/

#include <stdio.h>
#include <hello.h>

int main(int argc, char** argv, char** envp){
    sayHello();
    return 0;
}    



动态编译全过程:

robin@ubuntu:~/workspace/1024it.net$ ls     //查看文件
hello.c  hello.h  main.c
robin@ubuntu:~/workspace/1024it.net$ gcc -shared -fPIC hello.c -o libhello.so   //编译动态库
robin@ubuntu:~/workspace/1024it.net$ ls     //查看文件,libhello.so成功编译
hello.c  hello.h  libhello.so  main.c
robin@ubuntu:~/workspace/1024it.net$ 


robin@ubuntu:~/workspace/1024it.net$ gcc main.c -o main -L./ -lhello -I./       //编译main函数,在此链接我们之前编译的库libhello.so
robin@ubuntu:~/workspace/1024it.net$ ls                                         //查看文件,成功编译
hello.c  hello.h  libhello.so  main  main.c


robin@ubuntu:~/workspace/1024it.net$ ./main                   //执行main函数,输出我们的Hello!!!    一日二十四挨踢(www.1024it.net)
Hello!!!    一日二十四挨踢(www.1024it.net)
robin@ubuntu:~/workspace/1024it.net$                        //注意,此处如果提示找不到libhello.so,
                                                            //需要export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

静态编译全过程:


robin@ubuntu:~/workspace/1024it.net$ rm libhello.so main      //移除前面动态生成的文件
robin@ubuntu:~/workspace/1024it.net$ ls
hello.c  hello.h  main.c

robin@ubuntu:~/workspace/1024it.net$ gcc -c  hello.c            //编译生成obj文件
robin@ubuntu:~/workspace/1024it.net$ ls
hello.c  hello.h  hello.o  main.c
robin@ubuntu:~/workspace/1024it.net$ ar cr libhello.a hello.o   //生成静态库 libhello.a 
robin@ubuntu:~/workspace/1024it.net$ ls
hello.c  hello.h  hello.o  libhello.a  main.c
robin@ubuntu:~/workspace/1024it.net$ gcc main.c -L./ -lhello -I./ -o main        //把静态库编译进main中
robin@ubuntu:~/workspace/1024it.net$ ls
hello.c  hello.h  hello.o  libhello.a  main.c main 
robin@ubuntu:~/workspace/1024it.net$ ./main                  //运行输出我们想要的结果
Hello!!!    一日二十四挨踢(www.1024it.net)

你可能感兴趣的:(linux,dynamic,static,动态库,静态库)