当前位置: 首页 > 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.pierceye.com/news/683640/

相关文章:

  • 东莞购物网站如何建立免费个人网站
  • 网站个别页面做seo建立有效的什么机制
  • 学校网站建设模板wordpress 年月归档
  • 凡科做的网站行不行京东慧采入驻条件及费用2023年
  • 汽车网站建设页面网站建设营销公司
  • 可以写代码的网站有哪些问题微信公众号的推广
  • 网站建设项目怎么写新网站一般多久收录
  • 什么网站可以免费发广告合肥做网站一般多少钱
  • 企业网站优化的方式大安市网站
  • 镇江专业网站建设制作wordpress调查插件
  • 桂林网站制作多少钱最好的网站开发公司
  • 广州网站开发公司排名广州从化建设网站官网
  • 网站备案在杭州注册公司需要什么条件
  • 购买域名做销售网站可以吗河北邢台刚刚发布的紧急通知
  • 安溪建设局网站政务网站建设信息
  • 如何做公司自己的网站首页网站建设的钱计入什么科目
  • 网站建设公司行业免费下载网站模版
  • 海外做淘宝网站网站有关于我们的好处
  • 给别人做网站挣钱吗怎么建设推广网站
  • 南宁市网站开发深圳制作app
  • 临海大经建设集团网站雄安做网站
  • 网站设计多少钱通桥小学的网站建设
  • 上海制作网站的公司做彩票网站违法吗
  • ps软件手机版下载百度seo工具
  • 新乡网站关键词优化建设局网站信息管理制度
  • 海南论坛网站建设网站建设怎么放到云空间
  • 中山 灯饰 骏域网站建设专家网站建设需求范文
  • 东光网站建设淘宝店铺装修苏州网站建设服务
  • 平台型网站建设预算表哈尔滨网站制作多少钱
  • 手机网站焦点图装修房子的流程和顺序