精华内容
下载资源
问答
  • 写出本文,作者本人也是花去了一些时间的,在摸索的过程中遇到了很多问题,然后通过度娘来解决这些问题,最后进行一下的这些总结。...2、生成第一个.so文件libtest1.so (1)先写一个简单的test1.h头

    写出本文,作者本人也是花去了一些时间的,在摸索的过程中遇到了很多问题,然后通过度娘来解决这些问题,最后进行一下的这些总结。我是一个linux新手,只是在做项目的过程遇到了这个问题,就将它记录下来,分享给大家。如有错误,请大家指正,谢谢!

    1、首先当然是需要搭建Java环境和安装gcc,这个过程百度一搜一大把

    2、生成第一个.so文件libtest1.so

    (1)先写一个简单的test1.h头文件:

       选择一个路径下,输入命令gedit test1.h

    int add(int a, int b);

    (2)再写一个test1.c文件:

    #include "test1.h"
    
    
    int add(int a, int b){
    	return a + b;
    }
    


    (3)生成test1.o文件:

    当前路径下输入命令gcc -fpic -c test1.c


    (4)生成libtest1.so文件:

    输入命令gcc -shared -o libtest1.so test1.o



    3、生成另一个.so文件libtest2.so,去调用libtest1.so文件

    (1)写一个test2.c文件:
    # include"test1.h"
    
    int result();
    
    int result(){
    	return add(20, 20);
    }

       要包含test1.h头文件


    (2)生成test2.o文件:

      输入命令gcc -fpic -c test2.c


    (3)生成libtest2.so文件,并且将libtest1.so加入依赖项:  

      输入命令gcc -shared -o libtest2.so test2.so -L ./ -ltest1(./表示libtest1.so文件的路径,就是当前路径;-ltest1表示的是libtest1.so文件)


    (4)检测依赖是否成功:  

     输入命令objdump -x libtest2.so | grep NEEDED

     

     如上图所示,就表明依赖成功。如果没有依赖成功,可能是因为文件路径问题。


    4、到网上下载一个jna.jar文件


    将jna-4.4.0.jar文件放到一个路径下,后面需要将这个路径添加到变量CLASSPATH中,本文的路径是/home/chan/Desktop/testJna/lib/jna-4.4.0jar

    5、接下来就可以开始写java文件了

    (1)写一个java文件testSo.java

    import com.sun.jna.Library;
    import com.sun.jna.Native;
    
    public class testSo{
    	public interface testSOInterface extends Library{
    		public int result();
    		testSOInterface INSTANCE = (testSOInterface)Native.loadLibrary("test2", testSOInterface.class);
    	}
    
    	
    	public static void main(String[] args){
    		System.out.println(testSOInterface.INSTANCE.result());
    		
    		
    	}
    }

    (2)编译testSo.java文件
    输入命令javac testSo.java,如果遇到下面问题:



    就是缺少第四步所说的配置变量CLASSPATH,输入命令:
    export CLASSPATH=$CLASSPATH:/home/chan/Desktop/testJna/lib/jna-4.4.0.jar
    通过echo $CLASSPATH命令可以查看是否配置成功
    要是出现下面这个问题:



    就可能是你的java文件不能找到需要调用的libtest1.so文件和libtest2.so文件,只要将libtest2.so文件的路径加入坏境变量PATH中即可,输入命令:
    export PATH=$PATH:/home/chan/work/so(本文的so库存放的路径)

    (3)执行class文件
    输入命令java testSo,显示结果。


    展开全文
  • 1 Android Studio引入.so文件Android Studio中引入.so文件和eclipse方式有区别,google为了使开发者很好的过度到as开发中来也采用了俩种方式,一种是:沿袭了eclipse的习惯,另一种是as自身的引用方式: 一、libs...

    1 Android Studio引入.so文件

    Android Studio中引入.so文件和eclipse方式有区别,google为了使开发者很好的过度到as开发中来也采用了俩种方式,一种是:沿袭了eclipse的习惯,另一种是as自身的引用方式:

    • 一、libs文件夹下,导入.so文件,build.gradle文件中指明jni路径
    • 二、src/main下,新建jniLibs目录,导入.so文件,as工程能够自动找到该jni文件

    方式一:

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    

    Android中.so文件的引用

    前面已经给出了Android Studio中jni的基本使用,我们怎么样来调用生成的.so文件?

    前面已经引入了.so文件,现在需要开始引用了.具体分为以下几个步骤:

    1. 复制包以及包里面的native方法,记得方法里面要加入System.loadLibrary(“xxxjnixx”);
    2. 直接引用

    3. 相关连接:
      http://seniorzhai.github.io/2015/02/13/AndroidStudio%E8%B0%83%E7%94%A8so%E6%96%87%E4%BB%B6/
      http://ruikye.com/2014/08/30/androidstudio_so/
      http://www.cnblogs.com/SamFang/p/4179458.html
    展开全文
  • 什么是.so文件

    千次阅读 2021-02-09 14:23:17
    so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据 linux下何谓.so文件: 用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟.dll文件差不多 一般来说.so...

    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,可以看到它是如何调用动态库中的函数的。

    展开全文
  • python找.so文件的时候可能不遵循经典寻址,去系统的环境变量目录下找具体方法为 cd /etc/ld.so.conf.d 可以新建一个xx.conf文件 然后把你的.so文件所在地址写进去。或者在其中一个文件里写进地址。 然后 sudo /sbin...

    python找.so文件的时候可能不遵循经典寻址,去系统的环境变量目录下找具体方法为
    cd /etc/ld.so.conf.d
    可以新建一个xx.conf文件 然后把你的.so文件所在地址写进去。或者在其中一个文件里写进地址。
    然后
    sudo /sbin/ldconfig即可

    展开全文
  • 现在我有一个Java项目,是win系统下面,因为项目需求,需要调用.so文件去将.dat文件转换成.txt文件。因整个项目都在win下,没办法再提供Linux环境去运行.so文件。有没有方法直接在java项目中集成调用.so文件?我使用...
  • .o文件::: 目标文件。就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件.a...多个.a可以链接生成一个exe的可执行文件.so文件::: 是shared object即动态链接文件,和windows的.dll文件差不多,用于动
  • gcc生成.so文件及.so文件的使用

    千次阅读 2014-07-24 22:23:15
    .so文件在linux中正如.dll文件在windows中,作为动态链接
  • .o 就相当于Windows里的obj文件 ....so 是shared object,用于动态连接的,和dll差不多  .o文件是链接文件,.a是静态库文件,靠.o文件生成,作为一个库为外部程序提供函数,接口。 生成.o文件: gcc ...
  • Linux下的.so是基于Linux下的动态链接,其功能和作用类似与windows下.dll文件 一、引言 通常情况下,对函数库的链接是放在编译时期(compile)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)...
  • Linux下JAVA调用.so文件时 .h文件放哪路径下?java的jar包和.h文件怎么放
  • linux下生成.so文件和.a文件

    千次阅读 2019-01-23 10:48:37
    原文链接:...   linux下生成.so文件和.a文件 test.h 1 #ifndef _TEST_H_ 2 #define _TEST_H_ 3 4 void TestA(); 5 void TestB(); 6 7 #endif   t...
  • linux下将.a文件链接到.so文件的问题

    千次阅读 2017-06-05 19:34:41
    linux下将.a文件链接到.so文件的问题 时间 2014-11-25 15:30:01 姜糖水 原文 http://www.cnphp6.com/archives/63743 主题 Linux 比如在链接lib123.a库生成libabc.so库时经常会遇到这个问题,当...
  • Linux程序运行找不到动态库.so文件的三种解决办法 方法一:添加环境变量 方法1. 添加当前用户当前终端的环境变量-临时 export LD_LIBRARY_PATH=/home/czd/... #.so file path 方法2. 添加当前用户的环境变量 修改~/...
  • jar文件和.so文件的区别

    千次阅读 2017-06-23 17:31:33
    so文件.so文件是Linux系统的可执行文件,相当于windows上的exe执行文件,只可以在Linux系统运行。 so文件就是常说的动态链接库,都是C或C++编译出来的。 与Java比较就是:它通常是用的Class文件(字节码) Linux下的...
  • Linux系统.ko文件与.so文件

    千次阅读 2013-01-23 18:46:42
    .so文件是什么文件?  .ko -- kernel object,内核模块,可以在Linux内核起来之后动态的加载和卸载,内核使用的动态连接文件的后缀名。   .so -- shared object,用户层的动态库 (共享库),用于动态连接...
  • 我有一个.SO文件,eclipse如何加载这个.SO文件呢?应该把这个.SO文件放到哪个目录下面呢?我说的是纯java project而不是android 项目。
  • android开发需要导入.so文件,请问在idea中怎么引入.so文件,求大神回复
  • linux 下 .o 文件, .a文件,.so文件的区别

    万次阅读 多人点赞 2012-03-02 14:32:10
    最近在unbuntu环境下开发代码,由于很少使用linux开发环境,所以对linux编译方面了解更少,关于.o, .a, .so文件和可执行文件一直很困惑 今天特意查了一下关于它们的区分: .o 就相当于windows里的obj文件 ,一个...
  • 我在使用python调用c++程序时,先用g++把我的.hpp文件编译成.so文件,在运行python程序时出现下面的错误: Traceback (most recent call last): File "pos.py", line 2, in <module> pos = CDLL('./...
  • Unity Android调用.so文件

    千次阅读 2017-05-25 13:57:33
    最近做一个项目,发布目标平台是Android,开发中需要调用甲方的.so文件(用NDK直接编译C++文件而成),网上查了下调用方式,和调用DLL相同,大致步骤如下: 1.将.so文件放在Assets/Plugins/Android目录下; 2.C#...
  • Ubuntu下生成bin文件和.so文件

    千次阅读 2015-07-12 10:09:42
    Ubuntu下生成bin文件和.so文件(ubuntu下.so文件对应是windows下.dll文件,都为动态链接库)## 标题编译链接生成.so文件或者可执行文件时候,需要注意如下几点: 每一个工程里面必须包含这三个文件,并且里面有严格...
  • 调用C++ .so文件

    千次阅读 2016-08-21 19:11:38
    目标:使用C++成功调用C++文件生成的.so文件 场景:最近在设计交易系统,有使用到C++中间件层调用后台服务的状态,现在简单熟悉下怎样用C++动态的去调用.so文件。 过程: 1. 一般的交易系统后台系统都有中间件层和...
  • Linux下生成.so文件

    千次阅读 2016-07-28 09:47:00
    .so文件是什么?linux下的.so文件即Shared Libraries。Shared Library 是程序运行时加载的库文件。当一个shared library 被成功的安装以后,之后启动的所有程序都会自动使用最新的shared library。也就是说,生成一...
  • whl文件中找不到mod_wsgi.so文件解决办法

    万次阅读 热门讨论 2017-06-30 21:29:44
    mod_wsgi.so whl文件中找不到mod_wsgi.so mod_wsgi.so下载 mod_wsgi.so解决办法 python3.6 Django部署到apche中需要使用到mod_wsgi.so文件 Windows下python3.6 django 部署到Apache下 python3.6 mod_wsgi.so问题 ...
  • python封装.so文件注意事项

    千次阅读 2019-09-03 20:04:03
    最近项目上要求封装.so文件,其实很简单但也碰到了一些问题,本博客来总结一下,注意本文讨论的是ubuntu16.04下python3的情况。 例如你的文件夹包含了所有py文件,那很简单: --root: a.py b.py 这时候写一个...
  • GoLang 调用 .so 文件

    千次阅读 2020-07-15 20:32:35
    也可以针对不同语言(英文、汉语、德语……)加载不同的语言so文件,进行不同的输出; 还可以把编译出的文件给不同的编程语言用(如:c/java/python/lua等)。 以下记录一个Golang调用 .so 文件实现动态化编程的...
  • 调用.so 文件时报错has text relocations

    万次阅读 2016-02-19 11:45:35
    调用.so 文件时报错has text relocations调用.so文件时报如下错误: libcooee.so: has text relocations 说明编译.so文件时使用了较低版本sdk 而project 中的配置 targetSdkVersion22 大于so编译时使用的sdk...
  • AS 如何生成 .so文件

    千次阅读 2017-06-22 15:34:20
    简单整理一下 jni .so文件的生成 留着自己复习在看
  • .a文件.o文件和.so文件的区别

    千次阅读 2016-09-06 00:21:06
    o 就相当于windows里的obj文件 .a 是好多个.o合在一起,用于静态连接 .so 是shared object,用于动态连接的,和dll差不多

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 721,682
精华内容 288,672
关键字:

.so文件