c मैं लिनक्स में सी प्रोग्रामिंग भाषा की हेडर फाइल कैसे पा सकता हूं?




linux gcc (8)

जब मैं लिनक्स में सी प्रोग्राम लिखता हूं, और फिर उन्हें जीसीसी का उपयोग करके संकलित करता हूं, तो मैं हमेशा उन उत्सुकता फ़ाइलों के बारे में उत्सुक हूं। उदाहरण के लिए, जहां stdio.h है। अधिक आम तौर पर, stdbool.h कहां है?

जो मैं जानना चाहता हूं वह न केवल यह कहां है, बल्कि उन स्थानों को कैसे प्राप्त करें, उदाहरण के लिए, शेल कमांड का उपयोग करना या सी प्रोग्रामिंग भाषा का उपयोग करना।


मुझे लगता है कि सामान्य पथ है:

/ usr / lib / gcc / $ (ls / usr / lib / gcc /) / $ (gcc -v 2> और 1 | tail -1 | awk '{print $ 3}') / शामिल / stdbool.h


gcc -H ... नियमित संकलन के दुष्प्रभाव के रूप में प्रत्येक शामिल फ़ाइल के पूर्ण पथ को मुद्रित करेगा। किसी भी आउटपुट को न बनाने के अलावा -fsyntax-only उपयोग करें (यह अभी भी आपको बताएगा कि आपके प्रोग्राम में त्रुटियां हैं या नहीं)। उदाहरण (लिनक्स, जीसीसी -4.7):

$ cat > test.c
#include <stdbool.h>
#include <stdio.h>
^D
$ gcc -H -fsyntax-only test.c
. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdbool.h
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/bits/predefs.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/types.h
... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h

प्रत्येक पंक्ति की शुरुआत में बिंदुओं की संख्या गिनती है कि #include कितना गहराई से है।


locate stdio.h

या

mlocate stdio.h

लेकिन अगर आपने इसे कभी अपडेट नहीं किया है, तो डेटाबेस पर निर्भर करता है

sudo updatedb

आप gcc से स्कैन किए गए डिफ़ॉल्ट निर्देशिका क्या हैं यह जानने के लिए gcc से पूछताछ भी कर सकते हैं:

gcc -print-search-dirs

प्रीप्रोसेसिंग के दौरान सभी प्रीप्रोसेसर निर्देशों को वास्तविकताओं के साथ बदल दिया जाएगा। मैक्रो विस्तार की तरह, कोड टिप्पणी हटाने, हेडर फ़ाइल स्रोत कोड आदि सहित ...

हम इसे 'सीपीपी' - सी प्रीप्रोसेसर कमांड का उपयोग करके देख सकते हैं।

उदाहरण के लिए कमांड लाइन में,

सीपीपी Filename.c

यह प्रीप्रोसेस्ड आउटपुट प्रदर्शित करेगा।


अधिकांश मानक शीर्षलेख /usr/include में संग्रहीत होते /usr/include । ऐसा लगता है कि stdbool.h कहीं और संग्रहीत है, और यह निर्भर करता है कि आप किस कंपाइलर का उपयोग कर रहे हैं। उदाहरण के लिए, g ++ इसे /usr/include/c++/4.7.2/tr1/stdbool.h में संग्रहीत करता है जबकि क्लैंग इसे /usr/lib/clang/3.1/include/stdbool.h पर संग्रहीत करता है।


gcc -v प्रयोग करें और आप पथ शामिल कर सकते हैं। आमतौर पर, फ़ाइलें शामिल हैं /usr/include या /usr/local/include लाइब्रेरी स्थापना के आधार पर /usr/local/include


यदि आप जीसीसी का उपयोग करते हैं, तो आप एक विशिष्ट फ़ाइल को इस तरह से जांच सकते हैं:

echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1

-H प्रीप्रोसेसर से सभी शामिल फ़ाइलों को दोबारा प्रिंट करने के लिए कहता है। head -n1 1 उस नाम से आउटपुट की पहली पंक्ति लेता है, नामित हेडर द्वारा शामिल किसी भी फाइल को अनदेखा करने के लिए (हालांकि stdbool.h विशेष रूप से नहीं करता है)।

मेरे कंप्यूटर पर, उदाहरण के लिए, उपर्युक्त आउटपुट:

. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h

जब मैं खोज रहा था (फेडोरा 25 पर) मैंने "जहां stdio.h" इस्तेमाल किया था, मेरे लिए, यह /usr/include/stdio.h, /usr/shar/man/man3/stdio,3.gx में था। लेकिन जब आप फ़ाइल की तलाश में हैं, तो कहां उपयोग करें या पता लगाएं







header-files