मैं कुछ सी कोड लिखना चाहता हूं (ठीक है अगर यह केवल लिनक्स पर काम करता है) गतिशील रूप से एक नई साझा लाइब्रेरी लोड करने के लिए, और उसके बाद से एक विधि (रनटाइम पर निर्धारित करने के लिए) का आह्वान करें। ऐसा लगता है कि यह पहले से ही संभव है क्योंकि जावा मूल पुस्तकालयों को गतिशील रूप से लोड कर सकता है, और फिर उनसे तरीकों का आह्वान कर सकता है।मैं अपनी लाइब्रेरी को गतिशील रूप से कैसे लोड करूं, और इसमें एक विधि का आह्वान कैसे करूं?
int main() {
libinfo_t * lib_details = load_shared_library("libfoo.so");
run_method(lib_details, "bar", 7);
}
यह तर्क 7 (बार एक विधि libfoo.so में संकलित किया है) के साथ विधि 'बार' आह्वान होगा:
उदाहरण के लिए, मैं की तरह कुछ करने के लिए करना चाहते हैं।
उपयोग मामले का विवरण:
मैं एक द्विआधारी है कि एक निर्देशिका में सभी साझा पुस्तकालयों लोड करता है, और प्रत्येक से कुछ विधि चलाता संकलित करने के लिए, मूल कार्यक्रम की स्मृति संदर्भ में करना चाहते हैं। मैं एक निर्देशिका से इसे जोड़ने/हटाने के द्वारा साझा लाइब्रेरी को त्वरित रूप से सक्षम या अक्षम करने में सक्षम होना चाहता हूं। अवधारणा के
सबूत:
ऐसा लगता है इस तरह से जावा गतिशील JNI कोड के साथ लिंक करने के लिए प्रबंधन करता है के आधार पर, संभव हो जाना चाहिए। आप System.load() का उपयोग कर सकते हैं, और अपनी पसंद की लाइब्रेरी लोड कर सकते हैं। स्मृति से संकलन के साथ मिलकर, ऐसा लगता है कि यह आपको मनमाने ढंग से लाइब्रेरी से मनमाने ढंग से कार्य करने की अनुमति देगा। http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm
बातें मैं कोशिश की है:
मैं 'uselib' है, जो उपयोगी प्रतीत होता है के लिए मैनपेज देखा है, लेकिन मैं पुस्तकालय के साथ क्या करना है एक बार मैंने यकीन नहीं है इसे लोड किया
कुछ गुगलिंग http://dyncall.org/ लौटा दी, लेकिन यह वही नहीं है जो मुझे चाहिए - इस परियोजना को अभी भी फ़ंक्शन कॉल करने के लिए फ़ंक्शन पॉइंटर की आवश्यकता है।
मैं किसी भी संकेतक के लिए आभारी हूं कि बिना किसी ठोस उत्तर के, यहां तक कि कहां देखना है। धन्यवाद!
सी के पास विधियां नहीं हैं लेकिन कार्य नहीं हैं। –