System.loadLibrary()
কাজ করার জন্য , লাইব্রেরিটি (উইন্ডোজে, একটি ডিএলএল) অবশ্যই আপনার ডিরেক্টরিতে PATH
বাjava.library.path
সিস্টেমের সম্পত্তিতে তালিকাবদ্ধ কোনও পথে থাকতে হবে (যাতে আপনি জাভা যেমন চালু করতে পারেন java -Djava.library.path=/path/to/dir
)।
অতিরিক্ত হিসাবে, এর জন্য loadLibrary()
, আপনি শেষটি ছাড়া লাইব্রেরির মূল নামটি নির্দিষ্ট করেন .dll
। সুতরাং, জন্য /path/to/something.dll
, আপনি শুধু ব্যবহার করবে System.loadLibrary("something")
।
আপনি ঠিক UnsatisfiedLinkError
কী পাচ্ছেন তাও আপনাকে দেখতে হবে। যদি এটি কিছু বলে:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no foo in java.library.path
তাহলে এটি আপনার বা এর মধ্যে foo লাইব্রেরি (foo.dll) খুঁজে পাবে না । যদি এটি কিছু বলে:PATH
java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V
তাহলে লাইব্রেরিতে নিজেই এই অর্থে কিছু ভুল হয়েছে যে জাভা আপনার অ্যাপ্লিকেশনটিতে কোনও আসল জাভা ফাংশনকে আসল নেটিভ অংশে ম্যাপ করতে সক্ষম নয়।
শুরু করার জন্য, আমি আপনার System.loadLibrary()
কলটির চারপাশে কিছু লগিং রেখেছিলাম এটি সঠিকভাবে কার্যকর হয় কিনা তা দেখার জন্য। যদি এটি একটি ব্যতিক্রম ছুঁড়ে ফেলে বা কোনও কোড পথে না থাকে যা আসলে সম্পাদিত হয় তবে আপনি সর্বদা UnsatisfiedLinkError
উপরের বর্ণিত পরবর্তী ধরণের ব্যাখ্যা পাবেন।
সাইডেনোট হিসাবে, বেশিরভাগ লোকেরা loadLibrary()
ক্লাসে স্থিতিশীল আরম্ভকারী ব্লকে তাদের স্থানীয় কল্পনাগুলি স্থির করে দেয় যাতে এটি সর্বদা ঠিক একবার সম্পাদিত হয় তা নিশ্চিত করতে:
class Foo {
static {
System.loadLibrary('foo');
}
public Foo() {
}
}