2009-10-05 7 views
6

मैं सी सीख रहा हूं और ncurses lib के साथ खेल रहा हूँ। मैंने दोनों -कर्मियों और -कर्मियों के संदर्भों को देखा है, लेकिन मुझे अभी तक कोई अंतर नहीं मिला है (संकलन करते समय दोनों काम)।ncurses lib का उपयोग कर सी संकलन करते समय -lcurses और -lncurses के बीच क्या अंतर है?

सहायता की सराहना करें!

उत्तर

12

ncurses मूल यूनिक्स शाप पुस्तकालय का एक खुला स्रोत क्लोन है। libcurses। * आमतौर पर libncurses को इंगित करता है। * मूल पुस्तकालय के साथ संगतता प्रदान करने के लिए, इसलिए दूसरे पर एक का उपयोग करने के बीच कोई व्यावहारिक अंतर नहीं होगा।

आप वास्तव में है एक से अधिक है, तो 'शाप-प्रकार' पुस्तकालय स्थापित है, -lcurses अनिवार्य रूप से डिफ़ॉल्ट एक के लिए अपने कार्यक्रम लिंक होता है, जबकि -lncurses स्पष्ट ncurses कार्यान्वयन का चयन करेंगे।

+2

सोलारिस जैसे सिस्टम पर, libcurses.so मूल (यूनिक्स) श्राप लाइब्रेरी (या एक उन्नत शाप पुस्तकालय है, लेकिन जीएनयू libncurses लाइब्रेरी नहीं है)। लिनक्स सिस्टम पर, कोई फर्क नहीं पड़ता है। –

+0

@ जोनाथन लेफ्लर: आईबीएम एईक्स जैसे अन्य प्लेटफार्मों के लिए, एनसीआरएस नहीं हैं लेकिन मूल या उन्नत शाप हैं। – Luciano

0

मेरे सिस्टम (Slackware64 13.0), libcurses.so पर और दोस्तों ncurses समकक्ष के लिए प्रतीकात्मक लिंक हैं, इसलिए कोई अंतर नहीं है। libcurses.so (-lcurses) नाम शायद अन्य प्रणालियों के लिए डिज़ाइन किए गए कोड के साथ पिछड़ा संगतता प्रदान करने के लिए है, जिसमें ncurses के अलावा अन्य शाप कार्यान्वयन है।

0

मेरे (फेडोरा 11) पीसी /usr/lib/libcurses.so पर: "इनपुट (-लंकर्स)" शामिल है। मुझे लगता है कि इसका मतलब है कि दो रूप (-lcurses, -lncurses) बराबर है।

2

मेरे ओपनएसयूएसई 12.3 बॉक्स पर एनसीआरएस स्थापित के साथ libcurses के लिए कोई लिंक नहीं हैं। कोई भी सी प्रोग्राम जो -lcurses ध्वज का उपयोग करने का प्रयास करता है तब तक विफल हो जाएगा जब तक आप ध्वज को -lncurses में परिवर्तित नहीं करते।

OpenSUSE 12.3 > ls -al /usr/lib64/*curses* 
-rw-r--r-- 1 root root 2225910 Jan 25 2013 /usr/lib64/libncurses.a 
-rw-r--r-- 1 root root 780540 Jan 25 2013 /usr/lib64/libncurses++.a 
-rw-r--r-- 1 root root  69 Jan 25 2013 /usr/lib64/libncurses.so 
-rw-r--r-- 1 root root 782884 Jan 25 2013 /usr/lib64/libncurses++w.a 
-rw-r--r-- 1 root root 2768222 Jan 25 2013 /usr/lib64/libncursesw.a 
-rw-r--r-- 1 root root  70 Jan 25 2013 /usr/lib64/libncursesw.so 

लिंक भी फेडोरा 17 याद कर रहे हैं हालांकि, उबंटू 13.04 पर लिंक मौजूद हैं:

Ubuntu 13.04 > ls -al /usr/lib/x86_64-linux-gnu/*curses* 
lrwxrwxrwx 1 root root  12 Feb 8 2013 /usr/lib/x86_64-linux-gnu/libcurses.a -> libncurses.a 
lrwxrwxrwx 1 root root  13 Feb 8 2013 /usr/lib/x86_64-linux-gnu/libcurses.so -> libncurses.so 
-rw-r--r-- 1 root root 294180 Feb 8 2013 /usr/lib/x86_64-linux-gnu/libncurses.a 
-rw-r--r-- 1 root root 158798 Feb 8 2013 /usr/lib/x86_64-linux-gnu/libncurses++.a 
-rw-r--r-- 1 root root  31 Feb 8 2013 /usr/lib/x86_64-linux-gnu/libncurses.so 

तो -lcurses साथ संकलन OpenSUSE और फेडोरा पर असफल हो जायेगी लेकिन Ubuntu पर काम करते हैं। -lncurses के साथ संकलन सभी तीन distros के लिए काम करेगा।

टेकवे: यदि आप अपने कोड को विभिन्न लिनक्स डिस्ट्रोज़ पर संकलित करना चाहते हैं, तो आपको -lncurses का उपयोग करना चाहिए।

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