无法运行make - 创建的可执行文件

时间:2012-05-24 21:21:44

标签: c makefile valgrind

我写了一个简单的程序来运行一个河内游戏塔(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。谢谢!

3 个答案:

答案 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 $@ $<