मैंने इस प्रश्न को यहां देखा है, प्रस्तावित सुधारों का प्रयास किया है, लेकिन अब तक मेरे लिए कोई सफलता नहीं है। मेरे पास काफी जावा अनुभव है, लेकिन जेएनआई बहुत समय पहले है, हालांकि इसे लिनक्स पर कभी नहीं किया गया ...लिनक्स पर जेएनआई मुद्दा: साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता
मैं लिनक्स पर चल रहा एक सरल हैलोवर्ल्ड जेएनआई ऐप प्राप्त करने की कोशिश कर रहा हूं।
छोटे जावा फ़ाइल:
class HelloWorld {
private native void print();
public static void main(String[] args){
new HelloWorld().print();
}
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("HelloWorld");
}
}
छोटे सी फ़ाइल:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
संकलित सी फ़ाइल द्वारा:
java HelloWorld
:
gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so
द्वारा एप्लिकेशन चलाएं
या
java -Djava.library.path=/home/nxp40954/jnitesting/. HelloWorld
लेकिन अच्छी नहीं है, एक हो रही:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/nxp40954/jnitesting/libHelloWorld.so: /home/nxp40954/jnitesting/libHelloWorld.so: cannot open shared object file: No such file or directory
अजीब है, वास्तव में है क्योंकि वहाँ एक /home/nxp40954/jnitesting/libHelloWorld.so
फ़ाइल।
क्या किसी के पास कोई सुराग है? जब .so फ़ाइल लोड नहीं किया जा सकता
export LD_LIBRARY_PATH=.
java HelloWorld
java.lang.UnsatisfiedLinkError फेंक दिया जाता है:
हां, मुझे पता है कि libs को पथ को जाना चाहिए जिसे LD_LIBRARY_PATH द्वारा परिभाषित किया गया है, "।" वहाँ में, और यहां तक कि -Djava.library.path =/घर/nxp40954/jnitesting का उपयोग कर मैंने स्पष्ट रूप से परिभाषित जहां libHelloWorld.so स्थित है, लेकिन मैं अभी भी इस "ऐसा कोई फ़ाइल या निर्देशिका" त्रुटि मिलती द्वारा भी है। – Vlemmix
मैं अपने कोड संकलित और यह मेरे लिए काम करता है। क्या आप इसे एक निर्देशिका में करने की कोशिश कर सकते हैं और "।" ? बीटीडब्ल्यू, आप किस जावा का उपयोग कर रहे हैं? वाह ओएस? –