当前位置: 首页 > news >正文

网站标准宽度四川建设网招标网

网站标准宽度,四川建设网招标网,郑州今天最新消息新闻,3小时百度收录新站方法java调用c#xff0c;使用clion进行JNI开发#xff0c;ddl包生成以及so包生成 java基础代码生成C头部文件使用clion写C实现代码cmke打包构建使用java调用C执行linux环境下产生CPP的so包 java基础代码 先写好对应的基础代码#xff0c;先不管static加载的ddl文件#xff0c… java调用c使用clion进行JNI开发ddl包生成以及so包生成 java基础代码生成C头部文件使用clion写C实现代码cmke打包构建使用java调用C执行linux环境下产生CPP的so包 java基础代码 先写好对应的基础代码先不管static加载的ddl文件这里的ddl是后面c代码打包生成的使用绝对路径即可 package com.chw.gateway;/*** JNI开发*/ public class JavaWithCppApplication {static {System.load(E:\\document\\CLionProjects\\testDDL2\\cmake-build-debug\\libtestDDL2.dll);}public native int add(int a, int b);public native int sendSty(Student student);public static void main(String[] args) {JavaWithCppApplication obj new JavaWithCppApplication();int result obj.add(3, 5);System.out.println(Result: result);Student student new Student(chw, 3);System.out.println(id: obj.sendSty(student));} } package com.chw.gateway;import lombok.AllArgsConstructor; import lombok.Data;import java.io.Serializable;Data AllArgsConstructor public class Student implements Serializable {private String name;private Integer stuId;}生成C头部文件 使用javah 生成对应的头部文件因为c与java交互的头部文件相对复杂初学者还是直接生成比较好后面需要添加方法再自己手动添加如果类再包里面就指定报名如果没有再package里就直 javah 类名 就可以了 javah com.chw.gateway.JavaWithCppApplication 生成的C头部文件如下 JavaWithCppApplication.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include jni.h /* Header for class com_chw_gateway_JavaWithCppApplication */#ifndef _Included_com_chw_gateway_JavaWithCppApplication #define _Included_com_chw_gateway_JavaWithCppApplication #ifdef __cplusplus extern C { #endif /** Class: com_chw_gateway_JavaWithCppApplication* Method: add* Signature: (II)I*/ JNIEXPORT int JNICALL Java_com_chw_gateway_JavaWithCppApplication_add(JNIEnv *, jobject, jint, jint);JNIEXPORT int JNICALL Java_com_chw_gateway_JavaWithCppApplication_sendSty(JNIEnv *, jobject, jobject);#ifdef __cplusplus } #endif #endif 使用clion写C实现代码 clion构建c依赖库的话选择library进行创建项目 如下引入头文件后实现我们的方法JavaWithCppApplication.cpp。 JavaWithCppApplication.h头文件中引用到了jni.h这是个java与c交互的头文件可以到java安装目录下找win版本的可以在 D:\software\Java\jdk1.8.0_221\include\jni.h 和 D:\software\Java\jdk1.8.0_221\include\win32\jni_md.h 可以把这两个文件直接复制到c项目路径下。 // // Created by chw on 2024/3/18. // #include iostream #include JavaWithCppApplication.hJNIEXPORT int JNICALL Java_com_chw_gateway_JavaWithCppApplication_add(JNIEnv *, jobject, jint a, jint b) {return a b; }JNIEXPORT int JNICALL Java_com_chw_gateway_JavaWithCppApplication_sendSty(JNIEnv *env, jobject temp, jobject obj) {jclass jcs env-FindClass(com/chw/gateway/Student);jfieldID fileStuId env-GetFieldID(jcs, stuId, Ljava/lang/Integer;);jobject intObj env-GetObjectField(obj, fileStuId);jclass intClass env-FindClass(java/lang/Integer);jmethodID intValue env-GetMethodID(intClass, intValue, ()I);jint value env-CallIntMethod(intObj, intValue);std::cout stuId: value std::endl;jfieldID fileName env-GetFieldID(jcs, name, Ljava/lang/String;);jstring classStr (jstring) env-GetObjectField(obj, fileName);const char *cstr env-GetStringUTFChars(classStr, 0);std::cout cstr: cstr std::endl;return value; }使用的是cmake构建的话那么就直接在CMakeLists.txt 中添加依赖就可以加上jni 依赖 cmake_minimum_required(VERSION 3.27) project(testDDL2)set(CMAKE_CXX_STANDARD 17)find_package(JNI REQUIRED)include_directories(${JNI_INCLUDE_DIRS})add_library(testDDL2 SHAREDJavaWithCppApplication.cpp)# 链接 JNI 库 target_link_libraries(testDDL2 ${JNI_LIBRARIES})cmke打包构建使用 在clion中点击构建就可以打包产生我们需要的ddl文件了 java调用C执行 如果你使用的是clion默认安装的c的话需要将clion默认安装的c执行环境配置到系统环境变量保证在命令行执行g能够成功执行我的是在 D:\software\JetBrains\CLion 2023.3.1\bin\mingw\bin 需要将这个路径配置在环境path下否则java调用c的时候就会出现ddl链接不到等问题以及不可用等。配置好环境变量后需要重新启动下idea否则环境变量还是加载不到如果还是没生效就重启电脑。我这里win11就是配置了重启才生效的 如下成功调用 linux环境下产生CPP的so包 保证linux主机上安装有java的linux版本以及Ccmake 将本地的项目整个上传到linux环境到项目路径下我这里是testDDL2 cd /home/chw/Documents/jni_test/testDDL2 mkdir build cd build cmake .. make构建完了之后再生成so文件 /home/chw/Documents/jni_test/testDDL2/build/libtestDDL2.so 如果爆出cmake版本不匹配就把CMakeLists.txt 里面的 cmake_minimum_required(VERSION 3.27) 版本调整一下降低或者升高匹配一下安装的cmake版本。 如果还爆出某些依赖包找不到的问题报错Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2)详细报错如下 CMake Error at /usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2) Call Stack (most recent call first):/usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)/usr/local/share/cmake-3.23/Modules/FindJNI.cmake:382 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)CMakeLists.txt:20 (find_package)就加一下下面这里配置在CMakeLists.txt # JAVA_INCLUDE_PATH为jni.h所在路径一般在jdk目录下的include中 set(JAVA_INCLUDE_PATH /home/chw/software/jdk1.8.0_211/include) # JAVA_INCLUDE_PATH2为jni_md.h所在路径一般在jdk目录下的include/linux中 set(JAVA_INCLUDE_PATH2 /home/chw/software/jdk1.8.0_211/include/linux) set(JAVA_AWT_INCLUDE_PATH /home/chw/software/jdk1.8.0_211/include) set(JAVA_AWT_LIBRARY /home/chw/software/jdk1.8.0_211/lib) set(JAVA_JVM_LIBRARY /home/chw/software/jdk1.8.0_211/lib) 在java中引入对应的so包就可以执行了
http://www.zqtcl.cn/news/683640/

相关文章:

  • 永康做网站的化工网站模板免费下载
  • 潍坊高密网站建设如何做网页推广
  • 杭州房产网站建设wordpress 替换谷歌字体
  • 陕西省建设工程质量安全监督总站网站开发公司与施工单位工程造价鉴定报告
  • 嘉兴网站建设企业阿里巴巴国际贸易网站
  • 临沂手机网站建设珠海手机网站建设价格
  • 56m做图片视频的网站是什么软件开发和大数据哪个前景好
  • 郑州网站建设哪家做快消品的网站
  • 太原做网站费用东莞it外包
  • 深圳网站关键词优化公司集团网站建
  • 网站建设项目合同传奇手游网站
  • 如何学习网站建设app申请付费网站
  • 微网站开发平台案例重庆网站设计哪家公司好
  • 快递空包网站建设网站的首页怎么做的
  • 青海手机网站建设北京网站建设推荐华网天下
  • 网站网站建设公司孩子学编程网上课程哪家好
  • 跨境电商网站建设方案书江门网页制作
  • 门户网站建设定做如何使用域名访问网站
  • 做网站后台运营这个工作怎么样建设网站销售
  • 两学一做网上答题网站做网站域名是赠送的吗
  • 江苏住房城乡建设厅网站WordPress上传Excel
  • 广州淘宝网站建设济南高新区网站建设
  • 如何注册一个网站长沙的科技公司
  • 温州网络公司网站建设永久免费云linux服务器网页
  • 中国教育网站官网网站建设是半年的持久战
  • 为什么营销型网站比普通网站建站贵常州seo排名收费
  • 商贸公司寮步网站建设极致发烧学网站建设基础
  • 二手汽车手机网站模板四川百度推广排名查询
  • 做火情监控网站需要用什么系统做一个网站多少费用
  • 成都建设网站首页贺州网站建设