2

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

4

3 回答 3

2

你在fat/vfat你的硬盘分区吗?如果你可以在 cwd 中看到 hanoi (executable) 文件,然后检查它是否是可执行文件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
于 2012-05-24T21:40:59.830 回答
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]
于 2013-03-22T20:08:29.893 回答
1

如果那是您的整个 makefile,我看不到 make 的规则hanoi。你可能对这样的事情感兴趣。

hanoi: hanoi.c
    gcc CFLAGS -o $@ $<
于 2012-05-24T21:25:17.463 回答