一.学习并掌握可执行程序的编译、组装过程。
1.用 gcc 生成 .a 静态库和 .so 动态库
1.1编辑生成例子程序 hello.h、hello.c 和 main.c
dxc@dxc-virtual-machine:~$ mkdir test1 //创建test1目录
dxc@dxc-virtual-machine:~$ cd test1 //进入test1目录,创建文件将处于该文件夹内
dxc@dxc-virtual-machine:~/test1$ touch hello.h //依次创建头文件、源程序、主程序
dxc@dxc-virtual-machine:~/test1$ touch hello.c
dxc@dxc-virtual-machine:~/test1$ touch main.c
1.2编译文件
dxc@dxc-virtual-machine:~/test1$ gedit hello.h //进入头文件编辑界面并输入代码
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H
dxc@dxc-virtual-machine:~/test1$ gedit hello.c //进入源程序编辑界面并输入代码
#include <stdio.h>
void hello(const char *name)
{
printf("Hello %s!\n", name);
}
dxc@dxc-virtual-machine:~/test1$ gedit main.c //进入主程序编辑界面并输入代码
#include "hello.h"
int main()
{
hello("everyone");
return 0;
}
1.3将 hello.c 编译成.o 文件
dxc@dxc-virtual-machine:~/test1$ gcc -c hello.c //生成 hello.o 文件
dxc@dxc-virtual-machine:~/test1$ ls //运行 ls 命令查看是否生存了 hello.o 文件
如图已生成
1.4创建静态库
dxc@dxc-virtual-machine:~/test$ ar -crv libmyhello.a hello.o //创建静态库文件libmyhello.a
dxc@dxc-virtual-machine:~/test$ ls //查看结果
如图已将创建完成
1.5在程序中使用静态库
方法一:
dxc@dxc-virtual-machine:~/test1$ gcc -o hello main.c -L. -lmyhello
方法二:
dxc@dxc-virtual-machine:~/test1$ gcc main.c libmyhello.a -o hello
方法三:
dxc@dxc-virtual-machine:~/test$ gcc -c main.c //生成 main.o
dxc@dxc-virtual-machine:~/test$ gcc -o hello main.o libmyhello.a //生成可执行文件
dxc@dxc-virtual-machine:~/test$ ./hello
1.6创建动态库文件
dxc@dxc-virtual-machine:~/test1$ gcc -shared -fPIC -o libmyhello.so hello.o //创建动态库文件 libmyhello.so
dxc@dxc-virtual-machine:~/test1$ ls //查看动态库文件是否生成
hello hello.c hello.h hello.o libmyhello.so main.c main.o
1.7使用动态库
dxc@dxc-virtual-machine~/test1$ gcc -o hello main.c -