запуск программы Ada в терминале Linux

Я использую линукс минт. Установил gnat для работы с программами на Аде, используя "sudo apt-get install gnat".
создал простую программу hello world:

with Ada.Text_IO;
procedure Hello is
begin
    Ada.Text_IO.Put_Line("Hello, world!");
end Hello;

и сохранил его как "hello.adb"

Попытался запустить его из места, где он был сохранен, открыл терминал и набрал и получил следующее:

$ cd /media/disk1/ada\programs
$ gnatmake hello.adb
gcc-4.4 -c hello.adb
gnatbind -x hello.ali
gnatlink hello.ali< br/> $ hello
Программу hello можно найти в следующих пакетах:
* hello
* hello-debhelper
Попробуйте: sudo apt-get install
$ ./hello
bash: ./hello: Отказано в доступе

Что мне сделать, чтобы увидеть результат работы программы?
Где ошибка?

Немногие веб-сайты предлагали просто набрать "hello" после "gnatmake hello.adb", но это не сработало,
и лишь немногие предлагали попробовать "./hello" после "gnatmake hello.adb", но это тоже не помогло. не работает?

что дальше? помогите пожалуйста..


person jithhtharan    schedule 16.01.2013    source источник
comment
./hello должно было сработать. Что вы видите, когда делаете ls -l hello? Если флаг eXecutable не установлен, значит, в вашей конфигурации Linux что-то не так. GNAT следит за тем, чтобы флаг был установлен правильно, если ему не мешает что-то еще. (Я также использую комара Ада на Mint, так что все должно работать нормально.)   -  person Marc C    schedule 16.01.2013


Ответы (3)


Не встраивайте /media/disk1/ada\ programs, каталог, в котором у вас (очевидно) нет адекватных разрешений . Вместо этого создайте его где-нибудь в своем домашнем каталоге, ~, где у вас есть разрешение. Исполняемые файлы GNAT обычно устанавливаются в /usr/bin, который, вероятно, уже находится в вашем PATH.

$ which gnatmake
/usr/bin/gnatmake
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ cd ~
$ gnatmake hello
gcc-4.6 -c hello.adb
gnatbind -x hello.ali
gnatlink hello.ali
$ ./hello 
Hello, world!
person trashgod    schedule 16.01.2013
comment
Вероятно, также рекомендуется избегать использования имен каталогов с пробелами в них (хотя это вряд ли будет причиной вашей проблемы). - person Simon Wright; 17.01.2013
comment
Спасибо @trashgod! выполнение в домашнем каталоге ~ сработало ..! Но как изменить разрешение и выполнить из текущего каталога? - person jithhtharan; 17.01.2013
comment
Рад, что у тебя получилось. Вы должны иметь возможность использовать mkdir в своем домашнем каталоге и cd в новом каталоге. Разрешения по умолчанию также должны позволять вам строить там. - person trashgod; 17.01.2013
comment
Извинения @trashgod, он отлично работает в домашнем каталоге. Но хотите, чтобы он работал с программами /media/disk1/ada\? что там не так? что я должен сделать, чтобы он работал в этом каталоге? помогите пожалуйста... заранее спасибо. - person jithhtharan; 18.01.2013
comment
Ах я вижу. Каталог media может включать другие смонтированные файловые системы; подробнее здесь. Я был бы осторожен, но вы могли бы посмотреть на x разрешения промежуточных каталогов. - person trashgod; 18.01.2013
comment
@trashgod, еще раз спасибо за указанное направление. Нашел источник проблем, с которыми я столкнулся, потому что диск, на котором я пытаюсь выполнить, имеет формат vfat. Просмотр информации об изменении разрешения для диска vfat на использование исполняемых файлов. - person jithhtharan; 19.01.2013

Ваш процесс компиляции в порядке. Как говорит Марк С, обычно вам не нужно заботиться о разрешении на выполнение (команда chmod). GNAT должен позаботиться об этом.

Чтобы выполнить вашу программу, вы не можете просто набрать hello. Это новая программа: вы только что ее создали, и на самом деле ваш терминал слишком туп, чтобы понять, что вы имеете в виду. Вы должны сказать ему, где находится ваша программа в файловой системе. В этом смысл ввода ./hello. По сути, это означает «искать программу с именем hello в текущем каталоге». Следовательно, это не сработает, если вы переместились в другой каталог.

person tvuillemin    schedule 16.01.2013
comment
Я предполагаю, что GNAT делал выполнение +x, но у одного из каталогов в /media/disk1/ada\ programs нет необходимого разрешения. - person trashgod; 16.01.2013

Вы должны назначить разрешение на выполнение для вашего исполняемого файла:

$ chmod a+x hello

и запустите его:

$ ./hello
person JoaoBiriba    schedule 16.01.2013
comment
Вам не нужно делать это вручную. Процесс сборки gnatmake позаботится об этом, если только что-то в конфигурации не мешает ему. - person Marc C; 16.01.2013
comment
chmod a+x привет не работает..! :( получение той же ошибки отказа в разрешении. - person jithhtharan; 17.01.2013
comment
скорее всего, каталог находится в разделе, смонтированном с помощью noexec. вы не можете ничего выполнить из этого. - person Rommudoh; 25.01.2013