Linux 生成so库文件并调用
程序员文章站
2024-03-18 12:22:22
...
为了不暴露源码,将c文件生成so动态库来给别人调用
记录一下方法
首先简单的创建一些测试文件:test.h a.c b.c c.c
如下:
test.h
#include <stdio.h>
void a();
void b();
void c();
a.c
#include "test.h"
void a()
{
printf("aaa\n");
}
b.c
#include "test.h"
void b()
{
printf("bbb\n");
}
c.c
#include "test.h"
void c()
{
printf("ccc\n");
}
执行下面命令生成so文件:
gcc a.c b.c c.c -fPIC -shared -o libtest.so
下面写一个测试程序test.c,调用该so文件是否正常:
test.c
#include "test.h"
int main()
{
a();
b();
c();
return 0;
}
执行下面命令生成test可执行文件:
gcc test.c -L. -ltest -o test
下面执行看下结果:
可以看到能调用函数,证明so文件没问题。
对上面一些参数解释:
-shared该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
-Lxxx:xxx表示指定库所在的位置,因为我是当前目录,所以是-L.
-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称( l 的意思是lib,ltest即是去找libtest这个so)
下面介绍一下两个so相关命令
ldd
nm命令:查看so信息
可以看出so包含的三个函数,还有其它信息有兴趣自行看资料。
上一篇: 扫雷游戏---C实现
下一篇: vb.net实现简单的俄罗斯方块小游戏
推荐阅读
-
Linux 生成so库文件并调用
-
GDB调试实践二(gdb找不到动态库,对运行中的进程生成core文件) 博客分类: Linux调试Linux开发 GDB
-
Android NDK 生成以及调用so 文件
-
Android NDK 生成以及调用so 文件
-
sql文件 PHP备份数据库生成SQL文件并下载的函数代码
-
Android studio 下JNI编程实例并生成so库的实现代码
-
Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)
-
Android studio 下JNI编程实例并生成so库的实现代码
-
Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)
-
linux定时备份MySQL数据库并删除以前的备份文件(推荐)