Linux下so文件的生成和使用
2023-09-14 09:07:10 时间
环境:Vmware Workstation;CentOS-6.4-x86_64
说明:
1、源文件中不能有main函数;写so文件的时候使用C语言写,不要用C++。
2、在使用的时候,一定要保证存在头文件和.so文件。
(创建目录testso,并把myso.h和libmyso.so拷贝到testso目录下)
程序:
创建一个名字为libmyso.so的共享库文件,然后再定义一个程序来调用这个共享库文件。
步骤:
1、创建生成so文件的makefile:
.SUFFIXES:.c .o
CC=gcc
SRCS=myso.c
OBJS=$(SRCS:.c=.o)
EXEC=libmyso.so
start: $(OBJS)
$(CC) -shared -o $(EXEC) $(OBJS)
@echo "-----------------------------OK-----------------------"
.c.o:
$(CC) -fPIC -Wall -o $@ -c $<
clean:
rm -rf $(EXEC) $(OBJS)
2、编写头文件myso.h:
#ifndef __MYSO_H__
#define __MYSO_H__
#ifdef __cplusplus
extern "C"{
#endif
#include <stdio.h>
#include <stdlib.h>
// 求两个参数的最大值
int mymax(int num1, int num2);
// 求两个参数的和
int mysum(int num1, int num2);
#ifdef __cplusplus
}
#endif
#endif
3、编写源文件myso.c:
#include "myso.h"
int mymax(int num1, int num2)
{
if (num1 > num2)
return num1;
return num2;
}
int mysum(int num1, int num2)
{
return num1 + num2;
}
4、编译并执行程序,生成共享库文件so:
[negivup@negivup mycode]$ make
gcc -fPIC -Wall -o myso.o -c myso.c
gcc -shared -o libmyso.so myso.o
-----------------------------OK-----------------------
[negivup@negivup mycode]$ ls
libmyso.so makefile myso.c myso.h myso.o
5、编写使用so文件的makefile:
.SUFFIXES:.c .o
CC=gcc
SRCS=main.c
OBJS=$(SRCS:.c=.o)
EXEC=main
start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS) -L. -lmyso
@echo "-----------------------------OK-----------------------"
.c.o:
$(CC) -Wall -o $@ -c $<
clean:
rm -rf $(EXEC) $(OBJS)
6、编写源文件main.c:
#include "myso.h"
int main(void)
{
printf("mysum(5, 10) = %d\n", mysum(5, 10));
printf("mymax(5, 10) = %d\n", mymax(5, 10));
return 0;
}
7、编译并执行程序:
[negivup@negivup mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o -L. -lmyso
-----------------------------OK-----------------------
[negivup@negivup mycode]$ main
mysum(5, 10) = 15
mymax(5, 10) = 10
上面的程序,完成了so文件的生成和使用,一定要注意这个例子。
相关文章
- 探索Linux文件世界的红色之旅(linux文件红色)
- Linux系统定时清理内存的简易指南(linux定时清理内存)
- Linux删除安全密码保护文件(linux删除密码文件)
- Linux中修改文件权限的chmod命令(linux修改权限命令)
- Linux系统中文件复制功能的使用(linux文件复制函数)
- Linux设置文件权限:一步一步学会使用命令(linux获得文件权限)
- Linux下妙用rm命令删除文件(linux系统删除命令)
- 更改Linux Shell:使用chsh命令(linuxchsh)
- 标题:如何在Linux上运行Jar文件(linux运行jar文件)
- Linux 文件截断:快速简单的操作方法(linux文件截断)
- 开启Linux新旅程:基础配置指南(linux基本配置)
- Linux下安装LZMA:简单快捷的安装指南(linux安装lzma)
- Linux下改变用户ID:从简单到完整(linux更改用户id)
- Linux的新分支:带来了更多选择(linux的分支)
- Linux文件排序方法:按文件大小排序(linux文件按大小排序)
- 学习Linux必备:韩顺平Linux视频教程(韩顺平linux视频教程)
- Linux之终端:打开终极闭幕(linux结束符)
- Linux 密钥登录:简单安全的远程访问方式。(linux密钥登陆)
- 终极指南:如何在Linux中完美地删除文件和文件夹?(linux的删除)
- 如何在Linux中指定库文件的路径(linux指定库)
- “Linux 的可执行文件后缀名一览”(linux执行文件后缀)
- 探索Linux C编码转换技巧(linux c 编码转换)
- 把Windows文件转换成Linux文件格式(转换成linux文件格式)
- 夹大小Linux下查看文件夹大小的方法(linux中查看文件)
- 文件Linux 打包WAR文件:自动化部署系统开发必备技能(linux生成war)