草庐IT

hello-jni

全部标签

java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?

有一个C++函数,通过JNI从Java代码调用。我想将底层的c字符串正确地传递给Java,所以我做了以下安排://main.cppstringglobal;constchar*data()//CalledexternallybyJNI{return(global=func_returning_string()).data();//`.data()`=`.c_str()`}但在这种情况下,函数data()不再是线程安全的。在传递字符串而不导致任何未定义行为的情况下实现线程安全的最佳方法是什么? 最佳答案 Iwanttopasstheu

C++ Hello World 不工作?

我是C++的新手,我正在自学。我正在使用code::blocks,有一个问题。当我写helloworld时,什么也没有发生。这是调试器窗口中显示的内容:Buildingtoensuresourcesareup-to-dateSelectingtarget:DebugERROR:Youneedtospecifyadebuggerprograminthedebuggers'ssettings.(ForMinGWcompilers,it's'gdb.exe'(withoutthequotes))(ForMSVCcompilers,it's'cdb.exe'(withoutthequotes)

c++ - 为什么我的 "Hello world"程序需要将近 10 秒?

我已将CUDA运行时和驱动程序版本7.0安装到我的工作站(Ubuntu14.04、2xIntelXEONe5+4xTeslak20m)。我使用以下程序来检查我的安装是否有效:#include__global__voidhelloFromGPU(){printf("HelloWorldfromGPU!\n");}intmain(intargc,char**argv){printf("HelloWorldfromCPU!\n");helloFromGPU>>();printf("HelloWorldfromCPU!Again!\n");cudaDeviceSynchronize();pri

智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)

一、项目简介本项目是配合智慧自助餐厅下的一套综合系统,该系统分为安卓端、微信小程序用户端以及后台管理系统。安卓端利用图像识别技术进行识别多种不同菜品,识别成功后安卓端显示该订单菜品以及价格并且生成进入小程序的二维码,用户扫描后在小程序进行付款和提交订单,用户也可查看订单和菜品等信息,管理员在Web后台管理系统进行信息查看餐厅运营情况和管理菜品、订单评价等信息。本系统涉及的论文文献,可以进行参考和引用。《基于图像识别的智慧餐饮管理系统》《YOLOX-NanoIntelligentandefficientdishrecognitionsystem》二、涉及技术1、后端:SpringBoot、Spr

c++ - 使用 JNI (C++) 从 native 线程调用 Java 方法时出现问题

我有一个JNI问题,希望有人能帮我解决。我正在尝试从native线程调用名为LUSOutputJNI的Java类的构造函数。它在这个特定类的FindClass(...)上一直失败。代码如下:LOGE("1");JNIEnv*env=NULL;LOGE("2");intres=-1;res=g_vm->AttachCurrentThread(&env,NULL);if(env==NULL){LOGE("envisNULL,AttachCurrentThreadfailed");;}if(res>=0)LOGE("AttachCurrentThreadwassuccessful");jcl

TQ15EG开发板教程:使用vivado2023.1建立hello world工程

1:打开软件建立工程2:使用vivado创建设计模块并生成bit文件3:导出硬件平台,使用vitis建立工程4:使用vitis创建应用程序项目5:硬件设置与调试1:打开软件建立工程打开VIVADO2023.1创建一个新的工程输入项目名称和地址,下面那个选项为是否使用项目名称新建一个文件夹,我这里已经建了一个hello_world文件夹,所以不勾选选择RTL工程,勾选不添加文件搜索15eg,选择xqzu15eg-ffrb1156-2-i。这一步选择芯片型号,一定要选择和自己开发板相匹配的型号(本实验使用的开发平台是XCZU15EG对应的芯片型号xqzu15eg-ffrb1156-2-i)完成创建

java - 从 JNI 代码检查 Java 类中是否存在可选字段或方法

我有一个Java类,可以对其进行子类化以添加额外的字段。有一个相应的C++JNI方法将与该字段交互。但是,我希望JNI代码同时处理基类和子类,这意味着它必须检测该字段是否存在。我的(简化的)JNI代码如下所示:fid=j.GetFieldID(jc,UTF8_SECPARM,SIG_SECPARM);if(fid==0)return;...continuewithfid...虽然GetFieldID()方法返回NULL,但应用程序在处理的某个进一步点出现异常,这似乎与此代码无关。然而,它在某种程度上是相关的,因为如果我只是在GetFieldID()方法之前返回,则没有异常(except

java - JNI 字符串和 C 字符串

在JNI函数FindClass的文档中,我可以阅读有关参数name的信息:name:afully-qualifiedclassname(...)ThestringisencodedinmodifiedUTF-8.根据文档,修改后的UTF-8必须以双“\0”字符结尾:thenullcharacter(char)0isencodedusingthetwo-byteformatratherthantheone-byteformat这是否意味着我应该以这种方式从C中调用FindClass:FindClass("java/lang/String\0")即末尾有双'\0'?

c++ - Boost::Test:编译并运行一个 "hello world"程序

我正在尝试运行一个虚拟的Boost.test“helloworld”程序。我找到了文档here和there但显然我缺少了一些东西......这是我所做的:第1步:我安装了依赖项sudoaptitudeinstalllibboost-test-dev它安装头文件(libboost-test1.54-dev)和二进制文件(libboost-test1.54.0)。第二步:创建要编译的源文件我有一个名为test.cpp的文件,其中包含:#defineBOOST_TEST_MODULEconst_stringtest#include//EOF正如officialtutorial中所推荐的那样第

java - JNI线程模型?

当我从Java调用C/C++时,JavaVM或JNI是否会创建一个新线程来运行C/C++代码,而我的Java线程正在等待?我问这个是因为我的C/C++代码在GPU上运行某些东西,我需要检查特定的缓冲区以取回结果。获得结果后,我需要再次调用我的Java函数。所以我在考虑在C++端创建一个线程,该线程不断检查缓冲区,一旦有一些数据可用,就会回调Java端。 最佳答案 JNI不会在后台创建任何新线程。native函数与调用native函数的java方法在同一线程中执行。反之亦然,当native代码调用java方法时,java方法与调用该方