3 ms·
JNI is very much a C ABI, yes. I should know, for I've written JNI FFIs more than once. Yes, you can also write JNIs in C++, but you don't have to because JNI
by cryptonector 4y ago
JNI is very much a C ABI, yes. I should know, for I've written JNI FFIs more than once. Yes, you can also write JNIs in C++, but you don't have to because JNI's ABI is C not C++, and that is because C++ ABIs were not stable decades ago when JNI was written.
- pjmlp 4y agoJNI isn't a C ABI from the point of view what is being discussed here, it is a marshaling library. You don't do OS syscalls via JNI, rather marshal representation of Java objects for consuptiom from native languages.
- cryptonector 4y agoYou clearly haven't written a JNI. JNI is an API between the JVM and C- or C++-coded plugins that can implement native methods. "Native method" means "written in C (or C++)". There's a) a standard interface that C-coded methods must present (depending on their Java signature) and b) a set of utility C functions provided by the JVM. Because these plugins are loaded via `dlopen()`/`LoadLibrary_Ex()`/etc. the JNI API has an ABI. If you don't believe me go look it up. There's a ton of resources on JNI. Here's an example taken from the wikipedia page on JNI: extern "C" JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj, jstring javaString) { const char *nativeString = env->GetStringUTFChars(javaString, 0); //Do something with the nativeString env->ReleaseStringUTFChars(javaString, nativeString); }