2012-05-24 79 views
2

我寫了一個簡單的程序來運行河內遊戲(hanoi.c)的塔。 Makefile文件是非常簡單的:無法運行make製作的可執行文件

CFLAGS=-Wall -g 

all: hanoi 

clean: 
rm -f hanoi 

我稱之爲make,它會產生一個可執行hanoi,但是當我嘗試運行./hanoi我只得到了以下的輸出:

bash: ./hanoi: No such file or directory 

當我的valgrind運行它說:

valgrind: m_ume.c: can't open interpreter 

任何想法,爲什麼這可能是?我之前正在運行其他簡單的C程序,沒有這樣的麻煩,也不知道應該影響gcc或做出任何更改......我正在運行Ubuntu 11.10。謝謝!

+0

我還沒有想通了,爲什麼化妝可執行文件無法正常工作,但工作圍繞我usign現在是隻調用'GCC ./infile.c -o outfile' –

回答

2

我剛碰到這個自己。當動態鏈接的應用程序指向一個不存在的動態加載器時,會出現這兩種錯誤。

如果動態加載程序是/lib64/ld.so.1(例如),你應該能夠爲運行應用程序:

/lib64/ld.so.1 ./hanoi 

Valgrind的下並運行它作爲

valgrind /lib64/ld.so.1 ./hanoi 

要確定動態加載程序該計劃預計,您可以使用readelf -l ./hanoi。輸出應該包括像中間線:

[Requesting program interpreter: /lib/ld.so.1] 
1

如果這是您的整個生成文件,我看不到有哪個規則可以生成hanoi。你可能對這樣的事情感興趣。

hanoi: hanoi.c 
    gcc CFLAGS -o [email protected] $< 
+0

有用的,但給定的makefile **可以**使用GNU make生成名爲hanoi的可執行文件,並且該問題指定make _produces爲可執行文件'hanoi'_。 – pb2q

+0

這在使用GNU Make時不是必需的,因爲它通過使用[內建隱式規則]來推斷構建鏈(http://www.gnu.org/software/make/manual/make.html#Implicit -Rules)。而且,即使沒有任何Makefile也可以生成可執行文件,只需運行'make CFLAGS =「 - Wall -g」hanoi「即可。 –

2

您是否在您的硬盤的fat/vfat分區? 如果你可以在cwd中看到hanoi(可執行)文件,那麼檢查它是否可執行使用ls -all,應該有x。另外檢查file hanoi的輸出,應該說類似於

hanoi: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped 
+0

我檢查了這兩個,他們對我來說顯得很好...... –