标签: java-native-interface

java jni异常访问冲突

我使用 JNI 的 java 应用程序崩溃,hs_err_pid 文件给出错误“异常访问冲突”。操作系统是Windows VISTA。

据我所知,我的本机代码非法写入不属于它的内存块。

我过去曾在 Linux 上的纯本机代码上使用 valgrind 来检测此类问题。

但是当使用java时,valgrind就会失败并且无法工作。

您建议使用什么(如果有)方法来识别有问题的代码?

我不可能手动挖掘本机代码(几百万行)来识别它。

java java-native-interface access-violation

0
推荐指数
1
解决办法
3147
查看次数

从 JNI 调用Exception.printStackTrace()

问题是找出哪些 Java 函数调用某个 JNI 函数。在 Java 中,这可以通过 来实现new Exception.printStackTrace(),但这必须通过本机 (JNI) 函数来完成。

由于稍后找到自己的代码的最简单方法是将其发布在“网络”中,因此我同时发布了问题和答案。

java-native-interface android

0
推荐指数
1
解决办法
2848
查看次数

我应该在 Android 项目中的哪里添加二进制可执行文件?

因此,我有针对不同 CPU 构建的本机代码。我不想作为库加载,我想通过runtime.exec(...) 执行二进制文件。

有没有办法将它们放在 Android 处理 CPU 限定符的某个地方?或者我必须制作不同的 APK 吗?

java-native-interface android android-ndk

0
推荐指数
1
解决办法
2200
查看次数

使用 JNI 调用 Java 方法时,“方法签名”参数是什么?

我想在 Qt 中使用 JNI 调用 Android Java 方法。有一个我无法理解的奇怪的“方法签名”参数。这是什么,我应该如何设置?

在示例中,它类似于(II)Ior (I)I。这是什么意思?

例如:

jint max = QAndroidJniObject::callStaticMethod<jint>("java/lang/Math", "max", "(II)I", a, b);
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface qt signature

0
推荐指数
1
解决办法
2465
查看次数

如何将结构传递给 JCuda 中的内核

我已经看过这个http://www.javacodegeeks.com/2011/10/gpgpu-with-jcuda-good-bad-and-ugly.html,它说我必须修改我的内核以只获取一维数组。但是我拒绝相信在 JCuda 中创建结构并将其复制到设备内存是不可能的。

我想通常的实现是创建一个扩展一些本机 api 的 case 类(scala 术语),然后可以将其转换为可以安全地传递到内核中的结构。不幸的是我没有在谷歌上找到任何东西,因此问题。

java java-native-interface struct cuda jcuda

0
推荐指数
1
解决办法
458
查看次数

调用 NewStringUTF() 时崩溃

我正在编写一个 JNI 来从 Java 调用 C++ 代码。当我使用NewStringUTF()时它已经崩溃了。这是我的代码:

__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "The value of 3 is %d", 3);
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "The value of id is %s", id.c_str());

jstring jsId = m_env->NewStringUTF(id.c_str());// CODE CRASHES HERE

__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "The value of 4 is %d", 4);
Run Code Online (Sandbox Code Playgroud)

输出是:

V/myapplication ( 4930): The value of 3 is 3
V/myapplication( 4930): The value of id is 999999999999@example.example.net
F/art     ( 4930): art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: thread Thread[12,tid=5100,Native,Thread*=0xa1033400,peer=0x12c5b0e0,"QtThread"] using JNIEnv* from thread Thread[17,tid=5359,Runnable,Thread*=0xb4e0ac00,peer=0x12e37080,"Thread-161252"]
F/art     ( 4930): …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface qt android

0
推荐指数
1
解决办法
2160
查看次数

.c 语言中的 jstring 比较做什么

如何比较 c 语言中的两个 jstrings。我需要这个来执行 jni,其中逻辑写在 .c 文件中用于比较两个名称

c java-native-interface

0
推荐指数
1
解决办法
2260
查看次数

Java LoadLibrary 未解决依赖关系,但依赖的 dll 位于同一目录中

我在 Java 加载本机 dll 时遇到问题,因为它发生在 64 位 Windows 7 上。FWIW 包是 ZeroMQ,但重要的是该 jar 需要加载本机 dll,称为 jzmq.dll。这又取决于 libzmq.dll (和一些标准库)。我已将两个 dll 复制到 target/lib 并设置java.language.path为 target/lib。

如果我写:

System.loadLibrary("jzmq");
Run Code Online (Sandbox Code Playgroud)

我得到UnsatisfiedLinkError一个Can't find dependent libraries. 但是如果我说

System.loadLibrary("libzmq");
System.loadLibrary("jzmq");
Run Code Online (Sandbox Code Playgroud)

然后就没问题了,jzmq.dll加载成功。

在随附的 jar 中,它就包含在内System.loadLibrary("jzmq"),我不想在代码中摆弄依赖项。我不清楚为什么依赖项不会自动加载,也不清楚我需要做什么才能让它正常工作。

预先感谢您的任何帮助!

java dll java-native-interface

0
推荐指数
1
解决办法
1379
查看次数

JNI 将 jobobject 从一个类转换到另一个类

因此,如果我有一个jobjectfrom jclassclazz1并且我想将其类型转换为 jclass clazz2。该怎么做呢?

我检查了Oracle JNI 文档,唯一对转换的引用来自该函数IsAssignableFrom(),但仅此而已。

java-native-interface android android-ndk

0
推荐指数
1
解决办法
2368
查看次数

Java 的 ByteArray 的签名是什么?

我正在尝试onEventChannel通过 JNI调用C++:

class MainActivity: FlutterActivity(){
    companion object {
        @JvmStatic
        private fun onEventChannel(b: ByteArray): Int {
            Log.d(TAG, "onEventChannel");
            return 0;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我试着(Ljava/lang/byte;)I(Ljava/lang/ByteArray;)IonEventChannel,但他们没有工作。

java的签名是ByteArray什么?

java java-native-interface kotlin

0
推荐指数
1
解决办法
80
查看次数