2013-03-13 4 views
6

पर किसी भी जीसीसी संकलित सी कार्यक्रम को क्रियान्वित करने जब किसी भी सी प्रोग्राम है जो मैं टर्मिनल से gcc साथ संकलित किया है को क्रियान्वित करने से इनकार किया है, मैं एक अनुमति नहीं दी त्रुटि मिलती है।अनुमति ओएस एक्स (10.8.2) माउंटेन शेर

शुरू करने के लिए, मैं सत्यापित और मेरी ड्राइव (ऐसा करने से पहले, एक ही समस्या हो रहा था) पर मरम्मत अनुमतियाँ है।

उदाहरण देकर स्पष्ट करना और समस्या को अलग करने के लिए, मैं तुम्हें दिखाता हूँ कि इस अति सरल नमस्ते विश्व कार्यक्रम के साथ होता है (अन्य कार्यक्रमों के साथ, एक ही बात होती है):

#include <stdio.h> 

main() 
{ 
    printf("Hello World"); 
} 

अब, मैं करने के लिए इस को बचाने के मेरा डेस्कटॉप helloworld.c के रूप में। इस बिंदु पर, डेस्कटॉप, एक ls -l रिटर्न से:

total 8 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 

मैं तो gcc -c helloworld.c -o helloworld साथ संकलन (मैं भी एक ही परिणाम के साथ -o झंडा बिना संकलन की कोशिश की है)। कोई चेतावनी या त्रुटियां नहीं। एक ls -l अब रिटर्न: बस डिबगिंग की खातिर

-bash: ./helloworld.o: Permission denied 

, अगर मैं sudo (sudo ./helloworld.o) के साथ निष्पादित, यह रिटर्न:

total 16 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 
-rw-r--r-- 1 michael staff 724 Mar 13 14:16 helloworld.o 

./helloworld.o रिटर्न के साथ जीसीसी के उत्पादन पर अमल करने, प्रयास कर रहा है:

sudo: ./helloworld.o: command not found 

अब, के रूप में खोज आर का एक बहुत पर सिफारिश की गई थी कि अगर मैं निष्पादन योग्य झंडा chmod +x helloworld.o का उपयोग कर, सेट करने का प्रयास esults मैंने पाया, ls -l रिटर्न:

total 16 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 
-rwxr-xr-x 1 michael staff 724 Mar 13 14:16 helloworld.o 
हालांकि

, ./helloworld.o साथ निष्पादित करने के लिए प्रयास करने से अब रिटर्न:

-bash: ./helloworld.o: Malformed Mach-o file 

अब, खातिर, where gcc रिटर्न डीबगिंग के लिए:

/usr/bin/gcc 

तो , आपको लगता है कि मैं एक तीसरी पार्टी gcc उपयोग नहीं कर रहा देख सकते हैं।

किसी को भी पता है कि समस्या क्या हो सकता है? मैंने चारों ओर खोज करने की कोशिश की है, लेकिन मुझे कोई कामकाजी समाधान नहीं मिला। मैं इस एक ही समस्या पहले और के बाद से हाल में पुनर्स्थापित ओएस एक्स है (विभिन्न कारणों के लिए) हो रही थी और अभी भी एक स्वच्छ और संगठित विकास के वातावरण के साथ इस समस्या हो रही है। संदर्भ के लिए, मैं पर ओएस एक्स 10.8.2 हूँ और नवीनतम (एप्पल के डेवलपर वेबसाइट से) Xcode कमांड लाइन उपकरण के संस्करण के साथ Xcode 4.6 है। मैंने होमब्रे से या किसी अन्य तीसरे पक्ष के स्रोत से जीसीसी स्थापित नहीं किया है; यह जीसीसी है जो एक्सकोड कमांड लाइन टूल्स के साथ आया था।

आपकी मदद के लिए बहुत बहुत धन्यवाद! मैं वास्तव में आपकी मदद पढ़ने, निदान करने और आपकी सहायता देने के लिए अपना समय लेने की सराहना करता हूं। :)

+0

मुझे यह समस्या थी जब मैंने foobar बनाया था जहां foobar.c में कोई त्रुटि थी। जब मैंने त्रुटि तय की, तो यह काम किया। – quantumpotato

उत्तर

10

आप निष्पादन योग्य बाइनरी को संकलित और लिंक करने के बजाय ऑब्जेक्ट कोड (helloworld.o) निष्पादित करने का प्रयास कर रहे हैं। -c विकल्प का उपयोग न करें। इसके बजाए इसे चलाएं:

$ gcc helloworld.c -o helloworld 

यह निष्पादन योग्य अनुमतियों के साथ बनाया जाएगा। फिर आप चला सकते हैं।

$ ./helloworld 

सामान्य के रूप में।


इस का कारण यह है कि -c विकल्प संकलक बताता करने के लिए सिर्फ फ़ाइल संकलन है, लेकिन नहीं लिंक यह। अंतिम निष्पादन योग्य फ़ाइल बनाने के लिए लिंक प्रक्रिया की आवश्यकता है। यदि आप -c की आपूर्ति नहीं करते हैं, तो जीसीसी दोनों दृश्यों के पीछे आपके लिए संकलित और लिंक करेंगे।

+0

यह बिल्कुल ठीक है! आपका बहुत बहुत धन्यवाद! जैसे ही सिस्टम अनुमति देता है, मैं आपकी प्रतिक्रिया को जवाब के रूप में चिह्नित करूंगा। :) –

+0

@MichaelI: कोई समस्या नहीं, यह एक अच्छा सवाल था! – teppic

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