什么是.so文件_安卓so文件作用

什么是.so文件_安卓so文件作用so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据linux下何谓.so文件:用过windows的同学应该都知道.dll文件吧,这二者有什么共通之处呢,其实.so文件就跟.dll文件差不多 一般来说.so文件就是常说的动态链接库,都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码) Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库那么.so文件是怎么用的呢?forexample:(1)动态库的编译.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据

linux下何谓.so文件:

  1. 用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟.dll文件差不多
  2. 一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码)
  3. Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库

那么.so文件是怎么用的呢?for example: 

(1) 动态库的编译
这里有一个头文件: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 
参考2:都是由C或C++编译出来的 
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件 
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 
(2) 动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
 -L.:表示要连接的库在当前目录中 
-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称
命令:$ ldd test
注: 执行test,可以看到它是如何调用动态库中的函数的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191652.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opencv人脸识别训练「建议收藏」

    opencv人脸识别训练「建议收藏」一开始我运用人脸库训练出一个xml文件,后来新增人脸时候需要将新人继续拿来训练,需要将训练的特征信息加在原来xml文件里面。如果程序不关闭是可以将新人特征信息加到xml文件里的。比如,原来的xml文件为face.xml;现在采集了一些人脸,需要将这些人脸的特征信息提取加入到face.cml;然后下次load这个face.xml进行人脸识别。现在就是怎么将这些人脸加入原来的xml文件呢?这个是全

    2022年6月7日
    37
  • mysql的float取值范围_mysql float精度与范围总结 – numeric「建议收藏」

    mysql的float取值范围_mysql float精度与范围总结 – numeric「建议收藏」…是ture,不适用范围:不适用于检测可为0的参数。is_numeric();——只适用于检测数字,但假如参数名不存在,会出错,因此不适合于第一层检测。综合示例:复制代码代码如下:FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4…

    2025年6月8日
    0
  • Python librosa模块介绍

    Python librosa模块介绍librosa语音信号处理模块参考链接:https://www.cnblogs.com/LXP-Never/p/11561355.html

    2025年5月25日
    0
  • datagrid()_propertygrid控件

    datagrid()_propertygrid控件鉴于在本版收到好多asp.net初学者因为不了解ItemDataBound事件的用法而提出问题,特写此实例教程,以飨众友。实例:现要把如下的数据集(在查询管理器的查出来的结果集)绑定到DataGrid:绑定结果为——然而现在要实现如下效果:一、第一列的产品名是一个链接,它要求链接目标为:prod.aspx?name={产品名称}&spec={产品规格}二、当产品单价>=1元时,将其单价显示为红

    2022年10月13日
    0
  • csharp: 用Enterprise Library对象实体绑定数据

    csharp: 用Enterprise Library对象实体绑定数据EnterpriseLibrary: https://msdn.microsoft.com/en-us/library/ff648951.aspx//////是否存在该记录/////////publicboolExists(stringReportID){

    2022年10月20日
    0
  • sqlserver datetime与smalldateTime

    sqlserver datetime与smalldateTimedatetime 从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(等于3.33毫秒或0.00333秒)。–A.测试datetime精度问题DECLARE@tTABLE(datechar(21))INSERT@tSELECT’1900-1-100:00:00.000’INSERT@t

    2022年5月12日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号