जहाँ मेरा / usr / शामिल / sys निर्देशिका है?


14

मैंने हाल ही में कुबंटू 12.04 से 13.04 तक अपग्रेड किया, एक पूर्ण पुनर्स्थापना।

Gcc 4.7.3 का उपयोग करना। मैंने यह पता लगाने के लिए कुछ कार्यक्रमों को संकलित किया कि कोई /usr/include/sysनिर्देशिका नहीं है । यह है कि, types.h, stat.h, आदि, अनुपस्थित रहे हैं। वे include/linuxनिर्देशिका में मौजूद हैं, लेकिन नहीं include/sys

क्या चल रहा है?


क्या त्रुटि संदेश है कि GCC प्रिंट करता है? कृपया इसे और आपकी समस्या से संबंधित अन्य जानकारी प्रदान करने के लिए प्रश्न को संपादित करें
एडविन

1
क्या आपने आवश्यक स्थापित किया है?
सेठ

जिन कार्यक्रमों की जोड़ी मैंने ठीक संकलित करने की कोशिश की है, इसलिए जीसीसी से कोई त्रुटि संदेश नहीं है। मैं अभी यह नहीं समझ सकता कि हेडर कहां से आ रहा है। मेरे पास एक संपादक है जो फ़ंक्शन और syscall और इसी तरह के संदर्भ बनाता है और यह खुश नहीं है कि यह निर्देशिका नहीं ढूंढ सकता है।
बतख

1
हाँ, बिल्ड-अप आवश्यक है।
डक

जवाबों:


14

यदि आप 64-बिट पर Ubuntu का उपयोग करते हैं (मैं 32-बिट सिस्टम पर अभी बिल्कुल पाठ नहीं कर सकता), तो प्रश्न से निर्देशिका है:

/usr/include/x86_64-linux-gnu/sys

अब, इस जानकारी के होने पर, आप उन फ़ाइलों के लिए प्रतीकात्मक लिंक बना सकते हैं यदि आपको उस स्थान पर वास्तव में उनकी आवश्यकता है ( /usr/include/sys) एक टर्मिनल पर इसका उपयोग करते हुए:

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc

हाँ, 64 बिट। मैं कुछ इसी तरह से पढ़ता हूं और ऐसा लगता है कि सब कुछ उस निर्देशिका में है, लेकिन मुझे यकीन नहीं है कि हेडर को "#include sys / stat.h" से x86_64 / sys निर्देशिका में कैसे शामिल किया जा रहा है। क्या यह कुछ नया फेकल जीसीसी इंजेक्शन फीचर है? ऑफ-हैंड मुझे कोई सहानुभूति या ऐसा नहीं दिखता है (बाहरी रूप से) इस व्यवहार को जन्म देगा।
बतख

लगता है कि हम एक दूसरे को हवा में पारित कर दिया। तो लब्बोलुआब यह है कि संकलक कुछ जादू कर रहा है, लेकिन मुझे अपने संपादक को खुश करने के लिए कुछ सिमिलिंक हैक का उपयोग करने की आवश्यकता हो सकती है?
डक

@ डक मैंने आपकी टिप्पणियों के 2 मिनट से पहले सिर्फ अपना उत्तर संपादित किया :)
राडु रियडेनू

5

यदि आप 64-बिट लाइन पर काम कर रहे हैं तो libc6-dev-amd64 स्थापित करें। Ubuntu टर्मिनल पर निम्न कमांड टाइप करें:

sudo apt-get install libc6-dev-amd64

1

sys निर्देशिका बहुत सारे सिस्टम कमांड के साथ एक यूनिक्स / लिनक्स सिस्टम हेडर निर्देशिका है। अलग-अलग ब्रांड / वर्जन लाइनक्स इसे अलग-अलग जगहों पर रख सकते हैं। निम्नलिखित आदेश आपकी मदद कर सकते हैं:

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

पहला बीएसडी यूनिक्स सिस्टम हेडर का घर है।
दूसरा एक निर्देशिका है जिसमें लिनक्स 64 बिट्स सिस्टम हेड हैं।

मैं cmake के साथ समस्याओं में चलाने के लिए sys / stat.h फ़ाइल नहीं पा रहा हूँ। मेरा अस्थायी समाधान एक प्रतीकात्मक कड़ी बनाना है

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

मैं / usr / निर्देशिका को प्रदूषित नहीं करना चाहता, और मैं केवल एक विशेष हेडर फ़ाइल का लिंक बना रहा हूं, न कि संपूर्ण डिस्क निर्देशिका का। मुझे लगता है कि यह सीमेक का दोष है, इसलिए केवल एक लिंक बनाकर कम से कम प्रभाव डालें। आशा है कि यह उन लोगों की मदद कर सकता है जो एक ही समस्या से पीड़ित हैं।


1

आइए देखें कि gcc के डिफ़ॉल्ट में खोज पथ क्या है। से इस जवाब , हम इस आदेश को मिलती है:

gcc -xc -E -v -

आउटपुट के अंत में, मैं इसे अपनी मशीन पर देखता हूं:

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

दूसरी-अंतिम पंक्ति पर ध्यान दें। इसका मतलब यह है कि जब आप एक सी फाइल को संकलित करते हैं #include <sys/stat.h>, तो जीसीसी हमें /usr/include/x86_64-linux-gnu/sys/stat.hप्रयास करने से पहले देखेगा /usr/include/sys/stat.h, हमें कुछ भी सहानुभूति के बिना।


0

चूंकि मेरा आर्किटेक्चर amd64 है इसलिए कोई नहीं है libc6-dev-amd64। पैकेज स्थापित करने के लिए है libc6-dev-i386

इसने CPAN- पैकेज के लिए निर्भरता तय की।


'चूंकि मेरा आर्किटेक्चर amd64 है, इसलिए libc6-dev-amd64 नहीं है' : आपका क्या मतलब है?
मार्क वॉनहोमिसन

मेरा मतलब है, कि x86_64 आर्किटेक्चर, लाइब्रेरी / कर्नेल / आदि पर। पैकेजों में amd64 वास्तुकला है। इसलिए, libc6-dev-amd64 इंस्टॉल करने के लिए उपलब्ध नहीं है। फिर भी समस्या बनी रहती है, कुछ सॉफ्टवेयर देखने / usr / / sys / देखने की उम्मीद करते हैं।
जरी तुर्किया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.