#include "jni.h" void println_java(JNIEnv *env, const char *msg); // extern "C" [[gnu::visibility("default")]] [[gnu::used]] jint JNI_OnLoad(JavaVM *jvm, void *) { JNIEnv *env = nullptr; jvm->GetEnv((void **)&env, JNI_VERSION_1_6); println_java(env, "Hello from JNI!"); return JNI_VERSION_1_6; } void println_java(JNIEnv *env, const char *msg) { // Get system class jclass syscls = env->FindClass("java/lang/System"); // Lookup the "out" field jfieldID fid = env->GetStaticFieldID(syscls, "out", "Ljava/io/PrintStream;"); jobject out = env->GetStaticObjectField(syscls, fid); // Get PrintStream class jclass pscls = env->FindClass("java/io/PrintStream"); // Lookup printLn(String) jmethodID mid = env->GetMethodID(pscls, "println", "(Ljava/lang/String;)V"); // Invoke the method jstring str = env->NewStringUTF(msg); env->CallVoidMethod(out, mid, str); }