2012-05-24 1 views
2

Я написал простую программу для запуска башен hanoi-игры (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 или make ... Я запускаю Ubuntu 11.10. Благодаря!

+0

я до сих пор не разобрался, почему замыкающие исполняемые файлы не работают, но работа вокруг я usign сейчас это просто называют 'НКИ ./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

Если это ваш весь файл makefile, я не вижу правила, чтобы сделать hanoi. Вы можете быть заинтересованы в чем-то подобном.

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

Полезный, но данный makefile ** может ** выпустить исполняемый файл с именем hanoi, используя GNU make, и задает вопрос, что make _ создает исполняемый файл 'hanoi'_. – pb2q

+0

Это не обязательно в случае использования GNU Make, потому что это указывает на цепочку сборки, используя ее [встроенные неявные правила] (http://www.gnu.org/software/make/manual/make.html#Implicit -правил). Более того, можно создать исполняемый файл даже без Makefile, просто запустив 'make CFLAGS =" - Wall -g "hanoi'. –

2

Вы находитесь на разделе fat/vfat вашего жесткого диска? , если вы можете увидеть файл hanoi (исполняемый файл) в cwd, а затем проверить, является ли он исполняемым, используя 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

Я проверил их обоих, они кажутся мне прекрасными ... –