जीसीसी डिफ़ॉल्ट निर्देशिकाओं में क्या हैं?


131

जब मैं gcc के साथ एक बहुत ही सरल स्रोत फ़ाइल संकलित करता हूं तो मुझे मानक को पथ निर्दिष्ट करने की आवश्यकता नहीं होती है जैसे कि stdio या stllib जैसी फाइलें।

जीसीसी कैसे जानता है कि इन फ़ाइलों को कैसे खोजना है?

क्या यह /usr/includeमार्ग अंदर से कठोर है, या यह अन्य OS घटकों से पथ प्राप्त करेगा?

जवाबों:


188

gcc/ g++, साथ ही उनकी प्राथमिकताओं द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट रास्तों का पता लगाने के लिए , आपको निम्न कमांड के आउटपुट की जांच करने की आवश्यकता है:

  1. के लिए सी :
    gcc -xc -E -v -
  1. के लिए सी ++ :
    gcc -xc++ -E -v -

इसका श्रेय Qt क्रिएटर टीम को जाता है ।


5
cpp -v /dev/null -o /dev/null
नेहल जे वानी

36

एक छोटी आउटपुट के साथ एक कमांड है, जो स्वचालित रूप से लाइनों को शामिल करने की अनुमति देता है, जिसमें एक ही स्थान से शुरू होता है:

$ echo | gcc -Wp,-v -x c++ - -fsyntax-only
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/x86_64-redhat-linux
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/backward
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/include
 /usr/local/include
 /usr/include
End of search list.

इसका श्रेय libc ++ फ्रंट-पेज को जाता है


1

हालांकि मैं C ++ पर विचार करने के लिए Ihor Kaharlichenko के जवाब से सहमत हूं और अपने आउटपुट की कॉम्पैक्टनेस के लिए abyss.7 के जवाब के साथ, वे अभी भी जीसीसी के मल्टी-आर्क संस्करणों के लिए अपूर्ण हैं क्योंकि इनपुट प्रोसेसिंग कमांड लाइन के मापदंडों और मैक्रोज़ पर निर्भर करती है।

उदाहरण:

echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only पैदावार


/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../arm-none-eabi/include/newlib-nano                                                                                                              
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi/thumb/v7e-m/nofp                                         
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
 /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

जबकि echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-onlyपैदावार


/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi                                                          
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

पूर्व आह्वान का उपयोग होता है newlib(आउटपुट की रेखाएं 1 और 3 देखें), बाद वाला मानक शामिल है। सूची के अंत में आम फाइलें उपयोग के लिए एक उदाहरण हैं include_next

निचला रेखा: हमेशा सभी मैक्रोज़ और संकलक विकल्पों पर विचार करें , जिसमें शामिल निर्देशिकाओं को प्रिंट करें।


1

डिफ़ॉल्ट खोज पथों को सूचीबद्ध करने के लिए बस निम्नलिखित चलाएँ:

$(gcc -print-prog-name=cc1) -v

इसमें पथ शामिल नहीं हैं। केवल प्रोग्राम पथ और लाइब्रेरी पथ
kayahr

cc1आमतौर पर इसे सीधे नहीं कहा जा सकता है क्योंकि यह एक आंतरिक कमांड है जो PATH पर नहीं है। हो सकता है कि आप फ़ाइल का पता लगाने के लिए अपने उत्तर को संपादित करना चाहते हों।
कयाहर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.