यह @craq के लिए एक जवाब है:
I just compiled the file from C source and set it to be executable with chmod. There were no warning or error messages from gcc.
मैं थोड़ा हैरान हूँ कि आप था 'एक्ज़िक्यूटेबल में यह सेट' कर रहा हूँ - मेरे gcc
हमेशा निष्पादन झंडा ही तय करता है। इससे मुझे पता चलता है कि gcc
यह अंतिम निष्पादन योग्य फ़ाइल होने की उम्मीद नहीं करता था, या यह इस प्रणाली पर निष्पादन योग्य होने की अपेक्षा नहीं करता था।
अब मैं सिर्फ वस्तु फ़ाइल बनाने के लिए है, तो तरह की कोशिश की है:
$ gcc -c -o hello hello.c
$ chmod +x hello
(hello.c
एक विशिष्ट "नमस्ते विश्व" कार्यक्रम है।) लेकिन मेरी त्रुटि संदेश थोड़ा अलग है:
$ ./hello
bash: ./hello: cannot execute binary file: Exec format error`
दूसरी ओर, इस तरह से, file
आदेश के उत्पादन में तुम्हारा के समान है:
$ file hello
hello: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
जबकि अगर मैं सही ढंग से संकलित करता हूं, तो इसका उत्पादन बहुत लंबा होता है।
$ gcc -o hello hello.c
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=131bb123a67dd3089d23d5aaaa65a79c4c6a0ef7, not stripped
क्या मैं कह रहा हूँ है: मुझे लगता है जिस तरह से आप संकलित करके उसे अपने कोड लिंक के साथ कुछ है। हो सकता है कि आप कुछ प्रकाश डाल सकें कि आप ऐसा कैसे करते हैं?
क्या आप वाकई निष्पादन योग्य हैं? कमांड 'फ़ाइल' – meteorgan
का उपयोग करने का प्रयास करें समस्या मानना नामों ('सामान्य' बनाम 'सामान्य केटी') पर सिर्फ एक मिश्रण नहीं है,' फ़ाइल सामान्य केटी/बिन/sh' कमांड क्या है? यदि यह दो अलग-अलग आर्किटेक्चर (शायद एआरएम के लिए एक और इंटेल के लिए एक) देता है, तो यही कारण है कि आप इंटेल मशीन पर एआरएम नहीं चला सकते हैं। –
'file' का उपयोग करने के अलावा, मैं 'ldd' का उपयोग करने का भी सुझाव देता हूं; शायद गतिशील लिंकर या कुछ कोर साझा लाइब्रेरी अलग या गायब है .... –