2010-09-02 30 views
8

लिनक्स में एक स्थिर libary *.a गतिशील रूप से रनटाइम पर लोड किया जा सकता है?
मैं here पढ़ा है किगतिशील रूप से स्थिर पुस्तकालय लोड हो रहा है?

... दोनों स्थिर और साझा पुस्तकालयों के रूप में गतिशील रूप से लोड पुस्तकालयों इस्तेमाल किया जा सकता।

गतिशील रूप से स्थैतिक पुस्तकालय कैसे लोड करें?

उत्तर

8

एक स्थिर पुस्तकालय ऑब्जेक्ट फ़ाइलों का संग्रह केवल कम या कम है। यदि आप किसी प्रोग्राम में एक स्थिर लाइब्रेरी का उपयोग करना चाहते हैं, तो आपको इसके साथ निष्पादन योग्य लिंक करना होगा। निष्पादन योग्य में स्थिर पुस्तकालय (या आपके द्वारा उपयोग किए जाने वाले भाग) होंगे।

यदि आप dlopen का उपयोग कर रनटाइम पर एक स्थिर लाइब्रेरी लोड करना चाहते हैं, तो आपको पहले एक गतिशील लाइब्रेरी libfoo.so बनाना होगा।

+0

यह कामकाज का तात्पर्य है कि मुझे स्थिर पुस्तकालय से साझा लाइब्रेरी बनाना होगा यदि मैं इसे गतिशील रूप से लोड करना चाहता हूं। इसका मतलब है कि एक स्थिर पुस्तकालय गतिशील रूप से लोड करना संभव नहीं है और केवल साझा पुस्तकालयों का उपयोग गतिशील लोडिंग के लिए किया जा सकता है? यदि ऐसा है, तो स्रोत से उद्धृत उद्धरण की तुलना में सही नहीं है। –

+0

उद्धृत पाठ गलत है, या मैं उनका मतलब गलत व्याख्या कर रहा हूं। – JesperE

4

dlopen का उपयोग कर एक .a फ़ाइल खुल रही नहीं काम (उबंटू 10.04 पर परीक्षण) करता है। निम्न उदाहरण कार्यक्रम के साथ:

#include <dlfcn.h> 
#include <stdio.h> 

int main() 
{ 
    void *lib_handle = dlopen("/usr/lib/libz.a",RTLD_LAZY); 
    printf("dlopen error=%s\n",dlerror()); 

    printf("lib_handle=%p\n",lib_handle); 
} 

मैं:

dlopen error=/usr/lib/libz.a: invalid ELF header 
lib_handle=(nil) 

जबकि जब /usr/lib/libz.so बजाय का उपयोग कर, मैं:

dlopen error=(null) 
lib_handle=0x19d6030 

तो एक ही कोड एक साझा वस्तु के लिए काम करता है।

संबंधित मुद्दे