2014-02-17 157 views
1

因此,當我嘗試在我學校的「hercules」服務器上運行編譯的C程序時,它運行正常,我通常會這樣做。然而,我有一個需要使用fork的任務,並且禁止運行在該服務器上fork的程序,而是通過遠程連接到幾臺Linux機器之一併在那裏運行它們,從命令行運行它們編譯的C文件不可執行

但是,任何試圖這樣做給了我這個錯誤:

shell2: Exec format error. Binary file not executable. 

總之,我的命令提示符看起來是這樣的:

a049403[8]% shell2 
shell2: Exec format error. Binary file not executable. 

我已經得到了shell2文件中的工作目錄,當我輸入「ls」時,它用*字符顯示錶明它在概念上是可執行的。我已經嘗試將其權限設置爲777.它爲我一直在使用和運行的其他C程序生成相同的錯誤,並且「hercules」可以運行完全相同的文件而沒有任何困難或投訴。對於這個特殊程序我的make文件看起來是這樣的:

all: shell2 

Basics.o: Basics.c Basics.h 
    cc -c Basics.c 

doublinked.o: doublelinked.c doublelinked.h 
    cc -c doublelinked.c 

main.o: main.c Basics.h doublelinked.h 
    cc -c main.c 

shell2: main.o Basics.o doublelinked.o 
    cc main.o Basics.o doublelinked.o -o shell2 

clean: 
    rm -f *o shell2 

...如果我重新運行makefile似乎構建一個不困難的程序。

因此,一個可以編譯C程序的環境將無法運行它們嗎?任何可能的解決方法?

+2

目標機器上的'file yourprog/bin/sh'說了什麼?如果它說的沒有太多相同的東西,麻煩就是錯誤信息所說的 - 你的二進制文件是在一臺機器上準備的,但是在你試圖運行它的機器上不可執行。目前尚不清楚'hercules'的含義或其運行的是哪個O/S,但它似乎與您嘗試運行它的Linux機器不兼容。在Linux機器上進行編譯,而不是在'hercules'上。 –

+1

如果「hercules」沒有使用與您的Linux機器完全相同的可執行格式,運行完全相同的文件(您的文字)的「hercules」意味着什麼。刪除文件,*然後*'make clean',然後'make all' *在你的Linux機器上*。 – WhozCraig

+0

你應該在你自己的筆記本電腦上安裝Linux ...... –

回答

2

首先,你的Makefile不是很好。請參閱this examplethis one以改進它。在編譯某些家庭作業時,始終將-Wall -g標誌(獲得所有警告和調試信息)傳遞給gcc

然後,爲什麼你的二進制程序不能在目標機器上運行的可能解釋可能是libc版本不匹配。或者也許一個系統是32位,另一個是64位。使用file shell2找出。

我建議編輯make clean,然後再在目標機器上重新編譯(例如用make all)。

瞭解如何use the gdb debugger

1

如果您正在運行一個在不同(不兼容)架構上編譯的程序,那麼您幾乎肯定會遇到麻煩。

這是一個從是否要轉移,並試圖運行可執行文件,或試圖建立新的機器上從頭可執行的問題有點不清楚。目前還不清楚您的make(如果您在新機器上運行它)是否完全重建所有內容。

但是,考慮到"Exec format error",可以肯定的是前一種情況是您遇到的情況,試圖運行不兼容的可執行文件。

所以,這是我的建議。轉移一切新機並執行:

make clean all 

確保一切正在重建。

相關問題