接上篇博文 Ubuntu16.04系统中分别使用gcc与makefile编译C语言程序。
一、扩写程序
程序一:sub2.h
#ifndef __SUB1_H
#define __SUB1_H
#include "stdio.h"
float x2y(int a,int b);
#endif
程序二:sub2.c
include "sub2.h"
float x2y(int a,int b)
{
float x;
x=(float)a*b;
return x;
}
程序三:main.c
#include "stdio.h"
#include"sub1.h"
#include"sub2.h"
int main()
{
int a=3;
int b=7;
printf("a/b=%f",x2x(a,b));
printf("a/b=%f",x2y(a,b));
return 0;
}
二、静态库.a文件的生成与使用
1).生成.o文件
gcc -c sub1.c sub2.c main.c
2).生成静态库.a文件
ar crv libafile.a sub1.o sub2.o
3)使用静态库.a文件,创建可执行程序
gcc -o main main.c libsub.a
./main
三、共享库.so文件的生成与使用
1).生成.o目标文件(此处生成.o 文件必须添加"-fpic"(小模式,代码少),否则在生成.so 文件时会出错)
gcc -c -fpic sub1.c sub2.c
2).生成共享库.so 文件
gcc -shared *.o -o libsub.so
3).使用.so 库文件,创建可执行程序
gcc -o main main.c libsub.so
sudo cp libsub.so /usr/lib
./main
可以看见.so文件比.a文件大。