2013-10-11 5 views
7

मैं बाद में किसी अन्य मशीन पर संकलित प्रोग्राम डालने के उद्देश्य से, उबंटू के नवीनतम संस्करण पर एक सी प्रोग्राम संकलित करने की कोशिश कर रहा हूं। "गंभीर त्रुटि: एएसएम/page.h: ऐसी कोई फ़ाइल या निर्देशिका" हालांकि, जब मैं prog -ओ जीसीसी prog.c साथ संकलन, मैं कोई त्रुटि मिलती है:उबंटू पर सी कोड संकलित करने में परेशानी हो रही है। (# त्रुटियों को शामिल करें)

#include <stdio.h> 
#include <errno.h> 
#include <stdlib.h> 
#include <string.h> 
#include <malloc.h> 
#include <limits.h> 
#include <signal.h> 
#include <unistd.h> 
#include <sys/uio.h> 
#include <sys/mman.h> 
#include <asm/page.h> 
#include <asm/unistd.h> 

मैं एक मिल यहाँ हेडर हैं #include पर त्रुटि। यह घातक त्रुटि कहता है: asm/page.h: ऐसी कोई फ़ाइल या निर्देशिका नहीं। जैसे मैंने कहा, मैं बस इसे संकलित करने के लिए देख रहा हूँ। क्या मेरे पास लापता हेडर या कुछ पाने का कोई तरीका है? धन्यवाद।

+0

आपका प्रोग्राम क्या करना है? इसमें उपरोक्त सभी गड़बड़ क्यों शामिल हैं? अपने स्रोत कोड का अधिक दिखाएं, न केवल '# शामिल' निर्देश! –

उत्तर

4

आमतौर पर, asm/page.h केवल लिनक्स कर्नेल पेड़ में मौजूद है, आमतौर पर arch/<archname>/asm/page.h के तहत, और केवल कर्नेल कोड (या कर्नेल मॉड्यूल द्वारा) का उपयोग किया जाना चाहिए।

stdio.h और stdlib.h, दूसरी ओर, कर्नेल कोड में उपयोग नहीं किया जाना चाहिए। तो, आपका मूल स्रोत कोड सबसे अच्छा लग रहा है। सबसे अधिक संभावना है कि इसे पहले कभी भी asm/page.h की आवश्यकता नहीं थी, और वास्तव में इसे linux/types.h जैसे कुछ चाहिए (यह कर्नेल के asm/page.h में से एक द्वारा हेडर शामिल है)।

4

ये हेडर फाइलें गायब नहीं हैं, उन्हें स्थानांतरित कर दिया गया है। उबंटू पैकर्स ने चीजों को चारों ओर स्थानांतरित किया और हेडर फाइलों का स्थान जो '/ usr/include/asm' में था, अब '/ usr/include/asm-generic'

ठीक करने के लिए, बस एक लिंक जोड़ें :

sudo ln -s /usr/include/asm-generic /usr/include/asm

... या शायद आप शायद निर्माण-आवश्यक की कमी कर रहे हैं। लिनक्स में कोड संकलित करना आवश्यक है। स्थापित निर्माण आवश्यक

sudo apt-get install build-essential

अब उचित लिंक को पुन:

sudo ln -s /usr/include/asm-generic /usr/include/asm

बिल्ड जरूरी एक/usr/शामिल/ASM-सामान्य फ़ोल्डर स्थापित करना चाहिए। यदि आपके पास ऐसे फ़ोल्डर की कमी है तो बिल्ड-जरूरी चीजों को पुनर्स्थापित करें और फ़ोल्डर को सत्यापित करें।

क्या/usr/include/asm-generic फ़ोल्डर मौजूद है?

यह बिल्ड-आवश्यक द्वारा स्थापित किया गया है लेकिन इसकी जांच करना यह एक निर्भरता है जो इसे स्थापित करता है।

यदि/usr/include/asm-generic मौजूद नहीं है, तो linux-libc-dev को स्थापित या पुनर्स्थापित करने का प्रयास करें।

जो एएसएम-जेनेरिक फ़ोल्डर बनाना चाहिए। यदि ऐसा है तो उस पुराने लिंक को हटाएं और एएसएम-जेनेरिक के रूप में एएसएम रिलिक करें।

+4

'एएसएम' को 'एएसएम-जेनेरिक' से जोड़ने से न केवल गंदे हैक की तरह लगता है, यह किसी भी तरह से मदद करने की संभावना नहीं है। हाल ही में उबंटू 13.04 पर, जबकि निर्देशिका '/ usr/include/asm-generic' मौजूद है,' पृष्ठ.h' नहीं है (और 'बिल्ड-आवश्यक' और 'लिनक्स-libc-dev' स्थापित हैं)। – mvp

+0

ठीक है, मैंने बिल्ड-आवश्यक स्थापित किए हैं और लिंक बनाया है लेकिन मुझे अभी भी वही त्रुटि मिलती है।/usr/include/asm-generic मौजूद है, लेकिन इससे पहले कि मैं बिल्ड-जरूरी स्थापित करता हूं, यह पहले से मौजूद है। –

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