2010-08-21 9 views
6

व्यस्त पुस्तकालय रूप में busybox उपलब्ध है? मैं system() का उपयोग करने के बजाय व्यक्तिगत रूप से व्यक्तिगत ऐप्स का उपयोग करना चाहता हूं। मैंने libbusybox और libbb के बारे में सुना है लेकिन कोई दस्तावेज नहीं मिला।क्या साझा लाइब्रेरी फॉर्म में busybox उपलब्ध है?

+1

सिस्टम() का उपयोग न करें। execve() और दोस्तों को गलत काम करने की संभावना कम है। –

उत्तर

0

आप एक छोटे से एम्बेडेड प्रणाली पर हैं जहां यह मायने रखती है, तो आप बिजीबॉक्स बाइनरी में अपनी ऐप्लिकेशन लिंक कर सकते हैं, तो आप सब पर किसी भी गतिशील लिंकर बिना अपने कार्यों कॉल कर सकते हैं।

आप नहीं कर रहे हैं, तो बस प्रणाली(), या कुछ कांटा/कार्यकारी कॉम्बो का उपयोग करें।

यह संभावना नहीं तुम इतनी बार है कि प्रदर्शन मामलों उपयोगिताओं कॉल करना चाहते हैं जाएगा।

6

वहाँ libbusybox(.so) नामक एक साझा रूप में बिजीबॉक्स पुस्तकालय मौजूद है, तो आप सिर्फ जबकि menuconfig बनाने इसे सक्षम करने के लिए है। जब आप संकलित करते हैं, तो यह 0_lib फ़ोल्डर में उपलब्ध होगा। इस लाइब्रेरी में आपके पास int lbb_main(char **argv) नामक अच्छा छोटा फ़ंक्शन है।

आप अपने कोड में क्या करने की जरूरत कुछ इस तरह है:

extern int lbb_main(char **argv); 

int main() 
{ 
    char* strarray[] = {"ifconfig",0}; 
    lbb_main(strarray); 

    return 1; 
} 

आप आयात कर सकता है libb.h, लेकिन यह मेरे लिए काम नहीं किया, क्योंकि मैं कई त्रुटियों मिला है।

उसके बाद आप सिर्फ gcc -o code code.c -Lpath_to_0_lib_fodler -lbusybox की तरह किसी चीज़ का उपयोग कर संकलित करने के लिए है और काम हो गया!

आउटपुट को रोकने के लिए आपको printf और इसी तरह की कॉल को फिर से परिभाषित करना होगा, लेकिन यह #define printf(...) code' in libb.h जैसे soemthing मैक्रोज़ का उपयोग करके स्पष्ट रूप से करने योग्य है।

तुम भी बिजीबॉक्स खोल कि कांटा या प्रणाली का उपयोग नहीं करता अंडे सकता है, लेकिन है कि अच्छी तरह से अभी तक काम नहीं करता।

+0

यदि '# शामिल" libb.h "कारण" कई त्रुटियों "का कारण बनता है, तो कहीं गंभीर समस्या है। इसके बारे में और जानना अच्छा होगा। आपको निश्चित रूप से पुस्तकालय कार्यों को फिर से शुरू करने की आवश्यकता नहीं है; हेडर क्या हैं। –

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