我写了一个简单的程序来运行一个河内游戏塔(hanoi.c)。 Makefile非常简单:
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或make的任何更改......我正在运行Ubuntu 11.10。谢谢!
答案 0 :(得分: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
答案 1 :(得分: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]
答案 2 :(得分:1)
如果那是你的整个makefile,我看不到制作hanoi
的规则。您可能对此类兴趣感兴趣。
hanoi: hanoi.c
gcc CFLAGS -o $@ $<