📢前言
因为最近用到了so文件
相关内容
所以来学习一下.so文件
相关的知识,正好来写博客也当是记录并分享一些知识
最终目的是在Unity中与so文件
进行交互处理,但是本篇文章需要先对so文件
有一个基本的认识
这样在后面交互流程中也能 加深一点理解
🎬SO文件
SO文件概述
遇到一个之前并没有过多接触过的新知识
该怎么办?
那肯定是先在百度、CSDN等网上平台搜一下呀,正常学习思路都是这样吧~
所以先来看一下百度百科对于.so文件
的描述
-
SO文件
是Linux下共享库文件
,即编译好的可以供其他程序使用的代码和数据。 -
它的文件格式被称为
ELF文件格式
,节约资源,加快速度,代码升级简化。 -
由于
Android操作系统
的底层基于Linux系统
,所以SO文件
可以运行在Android
平台上。 -
Android
系统也同样开放了C/C++
接口供开发者开发Native
程序。
so文件特点
- so文件与
dll文件
类似 - so文件就是常说的
动态链接库
,都是C或者C++
编译出来的 Linux
下的so文件时不能直接运行的,一般来讲,.so文件称为共享库
。
so文件的使用方法
so文件跟.dll文件
差不多,因为在Unity里面.so文件是通过: [DllImport("DLLName")]
方式来调用的
可能一开始还以为这是调用dll文件
的方法,结果却是调用so文件
的方法~
至于具体怎样调用交互,在后面的文章会讲到!
- 动态库的编译
一般是将一个头文件so_test.h
和三个.c文件
test_a.c
、test_b.c
、test_c.c
,将这几个文件编译成一个动态库:libtest.so
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
不用该标志外部程序无法连接。相当于一个可执行文件。 - 动态库的链接
这里有个程序源文件test.c
与 动态库libtest.so
链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
命令:$ ldd test执行test,可以看到它是如何调用动态库中的函数的。
💬总结
本章节对so文件
只是做了一个简单的概述
后面文章开始介绍一下 怎样生成一个so文件
和 怎样在Android和Unity中调用这个so文件进行交互
使用