gpt4 book ai didi

java - JNI 栈顺序误解

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:17 24 4
gpt4 key购买 nike

我在一个非常简单的 JNI 示例(Java + C)中有以下代码

Java

    package jnitest;


public class JNITest {

static {
System.load("C:/.../JNItestNative.dll");
}

public native void hello();

public static void main(String[] args) {
JNITest jniTest = new JNITest();

System.out.println("Hello in java");
jniTest.hello();
System.out.println("Bye in java");
}
}

C

    /* 
* File: jnitestnative.c
* Author: DEFAULT
*
* Created on February 17, 2012, 12:24 PM
*/

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>

/*
*
*/
JNIEXPORT void JNICALL Java_jnitest_JNITest_hello
(JNIEnv *env, jobject obj) {

printf("Hello in C\n");
printf("Bye in C\n");

return;
}

我希望结果是这样的:

Hello in Java
Hello in C
Bye in C
Bye in Java

但是真的是这样的:

Hello in java
Bye in java
Hello in C
Bye in C

最佳答案

当我运行您发布的代码时,我得到了预期的输出。由于 stdout 由标准 C 库缓冲,而 JVM 倾向于绕过 C 库并直接使用操作系统调用,因此可能会发生一些奇怪的缓冲。

如果是这种情况,您始终可以在从 C 返回之前刷新 stdout:

printf("Hello in C\n");
printf("Bye in C\n");
fflush(stdout);
return;

关于java - JNI 栈顺序误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com