ubuntu@s1lp14:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04 LTS Release: 18.04 Codename: bionic ubuntu@s1lp14:~$ ubuntu@s1lp15:~$ sudo apt install -y -q ibm-java80-jre ibm-java80-jdk ... ubuntu@s1lp14:~$ apt-cache policy ibm-java80-jre ibm-java80-jdk ibm-java80-jre: Installed: 8.0.5.16-0ubuntu1 Candidate: 8.0.5.16-0ubuntu1 Version table: *** 8.0.5.16-0ubuntu1 500 500 http://archive.canonical.com/ubuntu bionic/partner s390x Packages 100 /var/lib/dpkg/status ibm-java80-jdk: Installed: 8.0.5.16-0ubuntu1 Candidate: 8.0.5.16-0ubuntu1 Version table: *** 8.0.5.16-0ubuntu1 500 500 http://archive.canonical.com/ubuntu bionic/partner s390x Packages 100 /var/lib/dpkg/status ubuntu@s1lp14:~$ vim jnisample.java ubuntu@s1lp14:~$ cat jnisample.java public class jnisample { // --- Native methods public native int intMethod(int n); public native boolean booleanMethod(boolean bool); public native String stringMethod(String text); public native int intArrayMethod(int[] intArray); // --- Main method to test our native library public static void main(String[] args) { System.loadLibrary("jnisample"); jnisample sample = new jnisample(); int square = sample.intMethod(5); boolean bool = sample.booleanMethod(true); String text = sample.stringMethod("java"); int sum = sample.intArrayMethod(new int[] {1, 1, 2, 3, 5, 8, 13}); System.out.println("intMethod: " + square); System.out.println("booleanMethod: " + bool); System.out.println("stringMethod: " + text); System.out.println("intArrayMethod: " + sum); } } ubuntu@s1lp14:~$ javac jnisample.java -h . ubuntu@s1lp14:~$ ls -la jnisample*.* -rw-rw-r-- 1 ubuntu ubuntu 1164 Jul 17 04:02 jnisample.class -rw-rw-r-- 1 ubuntu ubuntu 921 Jul 17 04:02 jnisample.h -rw-rw-r-- 1 ubuntu ubuntu 874 Jul 17 04:01 jnisample.java ubuntu@s1lp14:~$ ubuntu@s1lp14:~$ vim jnisample.cpp ubuntu@s1lp14:~$ cat jnisample.cpp #include "jnisample.h" #include #include // Mutate array to uppercase void uppercase(char* str) { size_t n = strlen(str); for (size_t i = 0; i < n; i++) { str[i] = toupper(str[i]); } } JNIEXPORT jint JNICALL Java_jnisample_intMethod (JNIEnv* env, jobject obj, jint num) { return num * num; } JNIEXPORT jboolean JNICALL Java_jnisample_booleanMethod (JNIEnv* env, jobject obj, jboolean boolean) { return !boolean; } JNIEXPORT jstring JNICALL Java_jnisample_stringMethod (JNIEnv* env, jobject obj, jstring string) { const char* str = env->GetStringUTFChars(string, 0); char cap[128]; strcpy(cap, str); env->ReleaseStringUTFChars(string, str); uppercase(cap); return env->NewStringUTF(cap); } JNIEXPORT jint JNICALL Java_jnisample_intArrayMethod (JNIEnv* env, jobject obj, jintArray array) { int sum = 0; jsize len = env->GetArrayLength(array); jint* body = env->GetIntArrayElements(array, 0); for (int i = 0; i < len; i++) { sum += body[i]; } env->ReleaseIntArrayElements(array, body, 0); return sum; } ubuntu@s1lp14:~$ ubuntu@s1lp14:~$ sudo apt -y -q install g++ ... ubuntu@s1lp14:~$ ls -lad /usr/lib/jvm/ibm-java80-jdk-s390x/ drwxr-xr-x 10 root root 4096 Jul 10 04:24 /usr/lib/jvm/ibm-java80-jdk-s390x/ ubuntu@s1lp14:~$ ls -la /usr/lib/jvm/ibm-java80-jdk-s390x/ total 12132 drwxr-xr-x 10 root root 4096 Jul 10 04:24 . drwxr-xr-x 3 root root 4096 Jul 10 04:24 .. drwxr-xr-x 2 root root 4096 Jul 10 04:24 bin -rwxr-xr-x 1 root root 668 May 24 01:00 copyright drwxr-xr-x 11 root root 4096 Jul 10 04:24 demo drwxr-xr-x 24 root root 4096 Jul 10 04:24 docs drwxr-xr-x 3 root root 4096 Jul 10 04:24 include drwxr-xr-x 5 root root 4096 Jul 10 04:24 jre drwxr-xr-x 3 root root 4096 Jul 10 04:24 lib -rwxr-xr-x 1 root root 57012 May 24 01:00 license_en.txt -rwxr-xr-x 1 root root 339198 May 24 01:00 notices.txt drwxr-xr-x 3 root root 4096 Jul 10 04:24 properties -rwxr-xr-x 1 root root 896 May 24 01:00 readme.txt -rwxr-xr-x 1 root root 84 May 24 01:00 release drwxr-xr-x 10 root root 4096 Jul 10 04:24 sample -rwxr-xr-x 1 root root 11970817 May 24 01:00 src.zip ubuntu@s1lp14:~$ ubuntu@s1lp14:~$ JAVA_HOME=/usr/lib/jvm/ibm-java80-jdk-s390x ubuntu@s1lp14:~$ echo $JAVA_HOME /usr/lib/jvm/ibm-java80-jdk-s390x ubuntu@s1lp14:~$ ls -la $JAVA_HOME/include/linux total 16 drwxr-xr-x 2 root root 4096 Jul 10 04:24 . drwxr-xr-x 3 root root 4096 Jul 10 04:24 .. -rwxr-xr-x 1 root root 1469 May 24 01:00 jawt_md.h -rwxr-xr-x 1 root root 1298 May 24 01:00 jni_md.h ubuntu@s1lp14:~$ ] ubuntu@s1lp14:~$ g++ -shared -O3 -I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/linux jnisample.cpp -o libjnisample.so ubuntu@s1lp14:~$ ubuntu@s1lp14:~$ java -cp . -Djava.library.path=$(pwd) jnisample intMethod: 25 booleanMethod: false stringMethod: JAVA intArrayMethod: 33 ubuntu@s1lp14:~$ __________ ubuntu@s1lp15:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial ubuntu@s1lp15:~$ ubuntu@s1lp15:~$ sudo apt install -y -q ibm-java80-jre ibm-java80-jdk ... ubuntu@s1lp15:~$ apt-cache policy ibm-java80-jre ibm-java80-jdk ibm-java80-jre: Installed: 8.0.5.16-0ubuntu1 Candidate: 8.0.5.16-0ubuntu1 Version table: *** 8.0.5.16-0ubuntu1 500 500 http://archive.canonical.com/ubuntu xenial/partner s390x Packages 500 http://archive.canonical.com/ubuntu xenial-proposed/partner s390x Packages 100 /var/lib/dpkg/status ibm-java80-jdk: Installed: 8.0.5.16-0ubuntu1 Candidate: 8.0.5.16-0ubuntu1 Version table: *** 8.0.5.16-0ubuntu1 500 500 http://archive.canonical.com/ubuntu xenial/partner s390x Packages 500 http://archive.canonical.com/ubuntu xenial-proposed/partner s390x Packages 100 /var/lib/dpkg/status ubuntu@s1lp15:~$ ubuntu@s1lp15:~$ vim jnisample.java ubuntu@s1lp15:~$ cat jnisample.java public class jnisample { // --- Native methods public native int intMethod(int n); public native boolean booleanMethod(boolean bool); public native String stringMethod(String text); public native int intArrayMethod(int[] intArray); // --- Main method to test our native library public static void main(String[] args) { System.loadLibrary("jnisample"); jnisample sample = new jnisample(); int square = sample.intMethod(5); boolean bool = sample.booleanMethod(true); String text = sample.stringMethod("java"); int sum = sample.intArrayMethod(new int[] {1, 1, 2, 3, 5, 8, 13}); System.out.println("intMethod: " + square); System.out.println("booleanMethod: " + bool); System.out.println("stringMethod: " + text); System.out.println("intArrayMethod: " + sum); } } ubuntu@s1lp15:~$ javac jnisample.java -h . ubuntu@s1lp15:~$ ls -la jnisample*.* -rw-rw-r-- 1 ubuntu ubuntu 1154 Jul 17 04:22 jnisample.class -rw-rw-r-- 1 ubuntu ubuntu 921 Jul 17 04:22 jnisample.h -rw-rw-r-- 1 ubuntu ubuntu 877 Jul 17 04:22 jnisample.java ubuntu@s1lp15:~$ vim jnisample.cpp ubuntu@s1lp15:~$ ls -lad /usr/lib/jvm/ibm-java80-jdk-s390x/ drwxr-xr-x 10 root root 4096 Jul 17 04:20 /usr/lib/jvm/ibm-java80-jdk-s390x/ ubuntu@s1lp15:~$ ls -la /usr/lib/jvm/ibm-java80-jdk-s390x/ total 12132 drwxr-xr-x 10 root root 4096 Jul 17 04:20 . drwxr-xr-x 3 root root 4096 Jul 17 04:20 .. drwxr-xr-x 2 root root 4096 Jul 17 04:20 bin -rwxr-xr-x 1 root root 668 May 24 01:00 copyright drwxr-xr-x 11 root root 4096 Jul 17 04:20 demo drwxr-xr-x 24 root root 4096 Jul 17 04:20 docs drwxr-xr-x 3 root root 4096 Jul 17 04:20 include drwxr-xr-x 5 root root 4096 Jul 17 04:20 jre drwxr-xr-x 3 root root 4096 Jul 17 04:20 lib -rwxr-xr-x 1 root root 57012 May 24 01:00 license_en.txt -rwxr-xr-x 1 root root 339198 May 24 01:00 notices.txt drwxr-xr-x 3 root root 4096 Jul 17 04:20 properties -rwxr-xr-x 1 root root 896 May 24 01:00 readme.txt -rwxr-xr-x 1 root root 84 May 24 01:00 release drwxr-xr-x 10 root root 4096 Jul 17 04:20 sample -rwxr-xr-x 1 root root 11970817 May 24 01:00 src.zip ubuntu@s1lp15:~$ JAVA_HOME=/usr/lib/jvm/ibm-java80-jdk-s390x ubuntu@s1lp15:~$ echo $JAVA_HOME /usr/lib/jvm/ibm-java80-jdk-s390x ubuntu@s1lp15:~$ ls -la $JAVA_HOME/include/linux total 16 drwxr-xr-x 2 root root 4096 Jul 17 04:20 . drwxr-xr-x 3 root root 4096 Jul 17 04:20 .. -rwxr-xr-x 1 root root 1469 May 24 01:00 jawt_md.h -rwxr-xr-x 1 root root 1298 May 24 01:00 jni_md.h ubuntu@s1lp15:~$ g++ -shared -O3 -I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/linux jnisample.cpp -o libjnisample.so ubuntu@s1lp15:~$ java -cp . -Djava.library.path=$(pwd) jnisample intMethod: 25 booleanMethod: false stringMethod: JAVA intArrayMethod: 33 ubuntu@s1lp15:~$