在Linux终端中运行Ada程序

5

我使用Linux Mint操作系统。为了编写Ada程序,我使用命令“sudo apt-get install gnat”来安装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
$ hello
可以在以下软件包中找到程序“hello”:
* hello
* hello-debhelper
尝试:sudo apt-get install
$ ./hello
bash: ./hello: 权限被拒绝

我该怎么做才能看到程序的输出?
出了什么问题?

一些网站说,只需在“gnatmake hello.adb”之后输入“hello”,但这并没有起作用,
还有一些人说,在“gnatmake hello.adb”之后尝试“./hello”,但这也没有起作用?

接下来怎么办?请帮忙解决。


4
“./hello” 应该能够工作。当您执行“ls -l hello”时,您看到什么?如果可执行标志没有设置,那么您的Linux配置可能有问题。除非出现其他干扰,否则GNAT会确保该标志被正确设置。 (我也在Mint上使用gnat Ada,所以一切应该都正常运行。) - Marc C
3个回答

7
不要在/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!

1
最好避免在目录名称中使用空格(虽然这不太可能是您问题的原因)。 - Simon Wright
谢谢@trashgod!在主目录~上执行起作用了..!但是如何更改权限并从当前目录执行? - jithhtharan
很高兴你已经让它工作了。你应该能够在你的主目录中使用mkdir并且cd到新目录中。默认权限应该让你可以在那里构建。 - trashgod
抱歉 @trashgod,它在主目录中运行良好。但是我想让它在 /media/disk1/ada\ programs 目录中运行?出了什么问题?我该怎么做才能使其在该目录下运行?请帮忙...提前感谢。 - jithhtharan
啊,我明白了。media目录可能包含其他已挂载的文件系统;更多信息请参见这里。我会谨慎一些,但你可以查看中间目录的x权限。 - trashgod
@trashgod,再次感谢您提供的指引。我找到了导致问题的源头,是因为我尝试执行的驱动器是vfat格式的。正在浏览有关如何更改vfat驱动器权限以使用可执行文件的信息。 - jithhtharan

3
你的编译过程没问题。正如Marc C所说,你通常不需要担心执行权限(chmod命令)。GNAT应该会处理这个问题。
要执行你的程序,你不能只输入hello。这是一个新程序:你刚创建它,实际上你的终端太傻了,无法理解你的意思。你必须告诉它在文件系统中哪里可以找到你的程序。这就是输入./hello的目的。基本上,它的意思是“在当前目录中查找名为hello的程序”。因此,如果你移动到另一个目录中,它将无法工作。

4
жҲ‘зҢңжөӢ GNAT зЎ®е®һжү§иЎҢдәҶ +x ж“ҚдҪңпјҢдҪҶжҳҜеңЁ /media/disk1/ada\ programs дёӯзҡ„жҹҗдёӘзӣ®еҪ•зјәе°‘жүҖйңҖзҡ„жқғйҷҗгҖӮ - trashgod

2

你需要为可执行文件分配执行权限:

$ chmod a+x hello

并运行它:

$ ./hello

5
你不应该手动去做这件事情。gnatmake构建过程会自动处理它,除非配置中的某些内容干扰了它。 - Marc C
"chmod a+x hello"不起作用..! :( 仍然收到相同的权限被拒绝错误。 - jithhtharan
很可能目录所在的分区被挂载为noexec,因此你无法从该分区执行任何文件。 - Rommudoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接