g++编译动态库。测试java jni调用第三方动态库。[android studio IDE]
来源:互联网 发布:anaconda mac 安装 编辑:程序博客网 时间:2024/06/08 17:28
gcc生成动态库命令。
例如:
Helloworld.h如下:
class Hellworld
{
public :
Helloworld();
int add(int a,int b);
int sub(int a,int b);
private:
int sum;
}
Hellwordl.cpp:
Helloworld::Helloworld():sum(0)
{
}
Helloworld::add(int a,int b)
{
return sum = a+b;;
}
Helloworld(int a,int b)
{
return a-b;
}
在文件目录下输入g++ Helloworld.cpp -fPIC -shared -o libHelloworld.so;
在同目录下生成动态库libHelloworld.so。可在main函数测试如下:
int main(int argh,char *argv[])
{
QCoreApplication a(argh,argv);
QLibrary lib("动态库地址");
lib.load;
if(lib.isload())
{
qDebug()<<"loadSuccess"<<endl;
}
Helloworld *hw = new Helloworld();
int value = hw->add(20,10);//输出30
value = hw->sub(12,6);//输出6
return a.exec();
}
思路:
新建一个JniLibrary.java,生成一个jni形式的头文件和源文件。如下:
public class JniLibrary{
public native int add(int x,int y);
}
头文件如下:
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_example_jnatest_JniLibrary_add(JNIEnv *,object,jint,jint);
源文件如下:
#include <stdio.h>
#include <dlfcn.h>
#include <assert.h>
typedef int (*Add) (int x,int y);
JNIEXPORT jint JNICALL Java_com_example_jnatest_JniLibrary_add(JNIEnv *env,object obj,hint x,hint y)
{
void *handle = dlopen("动态库地址",RTLD_LAZY);
Add add = (Add)dlsym(handle,"add");
assert (add != NULL);
return add(x,y);
}
目前引用dlfcn动态库头文件失败了,导致接口找不到。但是思路应该是正确的。
- g++编译动态库。测试java jni调用第三方动态库。[android studio IDE]
- android JNI 调用第三方动态库
- Android-jni 调用第三方动态库
- Android Studio调用第三方动态库
- android JNI学习之二 调用第三方动态库
- android jni开发 调用 第三方 动态链接库
- 使用JNI 调用第三方c++动态库
- Android studio Jni调用第三方库(CMakelist)
- JNI技术之Java调用C/C++编写的第三方dll-动态链接库
- Android Studio 使用NDK编程调用第三方动态库问题记录
- NDK/JNI 已有第三方静态库(动态库),编译静态库(动态库) -- 试试
- Android.mk JNI 调用第三方库
- Jni中执行ndk-build,编译第三方静态库(.a)和动态库(.so)的Android.mk文件写法
- android ndk调用第三方库生成动态库
- Android编译加入第三方动态链接库…
- Android编译加入第三方动态链接库…
- Android studio通过JNI调用动态链接库SO
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- 分布式系统事务一致性解决方案大对比
- 机器学习——推荐系统中常用的推荐算法简介
- 排序之选择、冒泡和插入
- Ruby读取Excel文件的两种方法
- 基于osg开发的商业、非商业和学术相关的项目工程
- g++编译动态库。测试java jni调用第三方动态库。[android studio IDE]
- 在Linux CentOS上编译并安装Clang 3.5.0,适用于Redhat和Clang3.8
- kubernets 架构设计 第2章 服务
- Android解析XML方式(一)使用SAX解析
- Xcode 7.3 cannot create __weak reference in file using manual reference counting
- CSS命名规范
- Linux的Proc文件系统详解
- apache日志分析简介
- ViewPagerWithIndicator 自定义ViewPager下方带圆点指示器