一、gcc 生成 .a 静态库和 .so 动态库
(一)生成 hello.h、hello.c 和 main.c
1.创建文件test1
2.新建一个hello.c文件
2.hello.c代码
#include <stdio.h>
void hello(const char *name)
{printf("Hello %s!\n", name); }
3.hello.h
4.hello.h代码
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H
5.新建main.c
6.main.c代码
#include "hello.h"
int main() {
hello("everyone");
return 0; }
(二)将 hello.c 编译成.o 文件
(三)由.o 文件创建静态库
1.创建静态库
2.用ls
查看静态库
(四)在程序中使用静态库
输入命令
(五)由.o 文件创建动态库文件
(六)在程序中使用动态库
(七)静态库和动态库同名时,gcc 命令调用库文件情况
1.先删除除.c 和.h 外的所有文件,恢复成我们刚刚编辑完举例程序状态
rm -f hello hello.o /usr/lib/libmyhello.so
2.提示无法删除,原因是权限不够,用管理员权限删除
sudo rm -f hello hello.o /usr/lib/libmyhello.so
3.再来创建静态库文件 libmyhello.a 和动态库文件 libmyhello.so
(1)创建静态库文件
ar -cr libmyhello.a hello.o
(2)创建动态库文件
gcc -shared -fPIC -o libmyhello.so hello.o
二.Linux下静态库和动态库的生成和使用
创建
A1.c
#include <stdio.h>
void print1(int arg){
printf("A1 print arg:%d\n",arg);
}
A2.c
#include <stdio.h>
void print2(char *arg){
printf("A2 printf arg:%s\n", arg);
}
A.h
#ifndef A_H
#define A_H
void print1(int);
void print2(char *);
#endif
test.c
#include <stdlib.h>
#include "A.h"
int main(){
print1(1);
print2("test");
exit(0);
}
2.静态库.a文件的生成和使用
3.共享库.so文件的生成和使用
三.实例使用静动态库
1.创建
sub1.c
float x2x(int a,int b)
{
float c=0;
c=a+b;
return c;
}
sub2.c
float x2y(int a,int b)
{
float c=0;
c=a/b;
return c;
}
sub.h
#ifndef SUB_H
#define SUB_H
float x2x(int a,int b);
float x2y(int a,int b);
#endif
main.c
#include<stdio.h>
#include"sub.h"
void main()
{
int a,b;
printf("Please input the value of a:");
scanf("%d",&a);
printf("Please input the value of b:");
scanf("%d",&b);
printf("a+b=%.2f\n",x2x(a,b));
printf("a/b=%.2f\n",x2y(a,b));
}
2.静态库的使用
3.动态库的使用
参考: