''未被识别为内部或外部命令

时间:2015-06-18 19:55:16

标签: c++ command-line

我刚刚开始学习C ++,我一直试图从命令行运行我的程序:

g++ helloworld.cpp

哪个有效,然后我输入

./a.out

然后它返回错误'。'不被视为内部或外部命令。 我尝试了a.out,但它返回:

  

' a.out的'不被视为内部或外部命令。

我对命令行很新,所以这可能是一个相当新手的问题。我正在使用gnu gcc编译器。我的代码只是一个简单的打印代码" helloworld",它似乎不是代码的问题,因为行g++ helloworld.cpp不会引发任何错误。只是添加,我使用的是Windows 8。

3 个答案:

答案 0 :(得分:2)

我最好的猜测是a.out不在您的目录中。通常,在从命令行编译程序时,添加-o标志并命名可执行文件(如helloworld.exe)。然后,您将确保实际创建了该名称的可执行文件。

在您的情况下,由于您最有可能在未指定-o标记的情况下运行Windows,因此默认为 a.exe ,而不是 a.out < / strong>,所以当您使用./a.out时,该可执行文件不存在。在这种情况下,您可以通过键入aa.exe来运行您的程序。您不需要Windows上的前导./

答案 1 :(得分:0)

./a.out

如果你在* NIX世界,使用linux或任何其他UNIX相关平台 。(点)表示当前目录,a.out表示可执行文件。

ls -l a.out 

列出其权限并确保其具有可执行权限。如果它没有使用以下命令给它许可;通常在生成a.out文件时应该有。

chmod 755 a.out

如果您的文件不在当前目录中,请使用绝对路径来调用可执行文件

<absolute_path>/a.out

如果您已经注意上述所有标准,它应该有效。

答案 2 :(得分:0)

在Windows世界中,“\”用于分隔文件和目录:

C:\Windows\System32\Etc

但是,大多数其他操作系统和网络都使用“/”

file:///c/windows/system32/etc
/etc/motd

在Unix中“。”指当前目录,Windows / DOS主要支持此目录。

基于Unix的编译器希望您为编译指定输出文件名,默认为“a.out”。但您可以使用“-o”

覆盖它
g++ test.cpp -o test.exe

这会在当前目录中创建一个名为“test.exe”的文件。如果您使用MinGW的“bash”命令行,您应该能够通过键入以下命令来运行上述可执行文件:

./test.exe   # note: no spaces!

在“$”提示符下

$ ./test.exe

但是,如果您在目录中,在DOS命令提示符中说C:\Dev,那将无效。 DOS认为'/'表示“参数的开始”:

C:\Dev\> dir /w

输出“宽”格式目录

因此,如果您使用的是DOS,则只需输入:

test.exe

.\test.exe

e.g。

C:\Dev\> test.exe
C:\Dev\> .\test.exe
C:\Dev\> c:\dev\test.exe

或者如果你依赖“a.out”

C:\Dev\> a.out
C:\Dev\> .\a.out