首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java调用so文件

---- 公司的硬件让我帮忙调用一个so文件,想着一直都没机会自己写一个jni,于是就答应了,在调用的过程中还踩了不少坑,特地写一篇博客记录一下。...---- 一、使用技术 原本是想直接用java自带的jni,但是我们硬件只给了一个so文件,而且里面的函数命名等规则不符合java的jni调用标准,于是就打算使用框架jna来调用。...,查看调用结果 四、将项目部署到Linux 我将项目直接部署到Linux是无法正常运行的,需要修改 Clibrary.java 类,因为Linux下使用getResource()方法获取到的路径是正确的...,只有在Windows上调用getResource()方法才会多出一条斜杠,所以在Linux下需要将类中的.subString(1)方法的调用删掉,为了让代码兼容Windows和Linux操作系统,我将...但在代码运行时,还是报错了: 参考王小草的博客,发现在Windows下生成的so文件是无法在Linux上运行的,因为不同系统生成的文件的ELF header可能是不一样的,所以让硬件工程师在Linux

9.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android如何调用so文件

    最近在尝试编译C\C++代码产生so文件的时候总结发现so文件的编译产生方式大概经历了3个阶段: 第一个阶段:通过Android.mk文件和Application.mk文件编译产生so文件; 第二个阶段...下面通过一个安卓调用C++代码打印字符串的实例介绍一下在Android Studio中使用最新的编译方式编译出so文件的步骤。 第一步:新建工程 新建工程:打开AS,新建工程。 ? ?...第二步:JNI编程 JNI是java调用C\C++代码的接口定义规范,是实现安卓调用C\C++代码必不可少的一部分,下面是本实例中JNI实现相关代码。...第三步:配置编译文件 Gradle需要通过调用CMake编译脚本将C\C++代码编译为java可以调用的外部链接库,所以接下来需要进行Gradle和CMake的配置。...调用JNI:现在在我们声明的getHelloString()方法之前加载刚才声明产生的so库,然后再在程序中调用getHelloString()方法就可以执行so库中对应的C++代码了。 ?

    10.5K81

    unidbg调用so文件生成xgorgon

    也用过 jtype 启动JVM,然后通过 native 对so文件进行调用,因为每次都需要启动JVM,所以效率也不高。...unidbg 他不需要运行 app,也无需逆向 so 文件,通过在 app 中找到对应的 JNI 接口,然后用 unicorn 引擎直接调用 so 文件,所以效率相对要高不少。...《抖音xgorgon(0401)》 下面准备调用libcms.so文件中的 leviathan 函数 首先在 src/test/resources 目录下新建文件夹dylib,放入libcms.so文件...“leviathan(II[B)[B” 需要调用的函数名,名字是smali语法,可通过jadx等工具查看 “vm.loadLibrary(new File)” so文件的路径,需要自行修改,最好为绝对路径...; import com.github.unidbg.linux.android.AndroidResolver; import com.github.unidbg.linux.android.dvm.

    3.2K30

    QT配置opencv_qt调用opencv

    win10系统Qt5.9.2配置OpenCV4.5.0库教程(其中OpenCV库已经编译过的,可以直接用) Qt和opencv安装包资源 云盘链接:https://pan.baidu.com/s/1stA2sQzfpiuyG8rtooJJ4A...提取码:809t 话不多说,配置过程如下:双击Qt的安装包 一、Qt的安装 点击next 点击Skip 设置安装路径(我是把qtCreator和opencv都安装到了Qt的文件夹下),然后点击下一步...第一个文件夹就是从云盘里直接复制过来,第二个就是刚才Qt的路径,为方便起见,我都把它们放到同一个文件夹下面了。...三、Qt和opencv的环境变量设置 Qt和OpenCV各需要配置一个Path路径, Qt的Path:H:\Qt\qt5.9.2\Tools\mingw530_32\bin OpenCV的Path:...INCLUDEPATH +=H:\Qt\opencv3.4.0\OpenCV-MinGW-Build-OpenCV-3.4.5\include \ H:\Qt\opencv3.4.0

    1.9K20

    linux 什么是SO文件

    下面的内容大多都是连接中的,穿插我自己的笔记 牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识。 1.so文件是什么?...———————————————————————- 链接:得到输出文件libs.so gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc...这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。   ...在Linux中,应用程序通过使用soname,来指定所希望库的版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容的,这使得程序员摆脱了共享库版本冲突问题的困扰。...下面的还没细看,汗 4.库的初始化,解析: windows下的动态库加载,卸载都会有初始化函数以及卸载函数来完成库的初始化以及资源回收,linux当然也可以实现。

    5.7K20

    python调用调用Linux命令

    如何调用Linux命令 下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的: import...ftp.login('user','password') ftp.retrbinary('RETR readme.txt', open("readme.txt", "wb").write) ftp.quit() 调用...add(int x,int y) {     MyClass obj;     return obj.add(x,y); } 将c++编译成动态库: g++ -fPIC api.cpp -o api.so...('/tmp/api.so') print "result: %d" %(plib.add(1,2)) 系统调用 虽然需求好像有点“过份”,但是强大的python是可以调用诸如ioctl这类的Linux...系统调用的, 以下的例子是让蜂鸣器响: import fcntl fd = open('/dev/pwm', 'r') fcntl.ioctl(fd, 1, 100) 等效于以下c代码 int fd =

    5.2K20
    领券