需要一些帮助编译" Hello World"用g ++

时间:2014-04-21 05:49:31

标签: c++ linux

我最近参与了Debian,并希望开始将我的代码从visual studio翻译成vim / make / G ++。

我正在运行Debian wheezy并安装了G ++ 4.7.2(与debian一起使用,无法更改它 - 下载配额不够)。我创建了一个文件main.cpp并将以下内容放入其中:

#include <iostream>

int main(){
    std::cout << "hello world" << std::endl;
    return 0;
}

cd进入该文件的目录并运行g++ main.cpp -o hello,它不会产生任何错误或输出。然后,当我输入. hello时,我收到此错误:

  

bash:。:hello:无法执行二进制文件

我尝试运行chmod 777 hello认为这可能是一个权限问题,但这也无济于事。我想我可能无意中生成了一个目标文件,但我不知道如何检查......

1 个答案:

答案 0 :(得分:8)

. hello

告诉bash shell在当前shell的上下文中运行hello 脚本(即,它尝试 source 脚本),这是为什么bash给你一个错误。你想要执行的方法:

./hello

实际上并不是bash告诉你你的文件不可执行,而是告诉你它不能将那个二进制文件解释为脚本。 chmod与此无关,因为从gcc工具链中成功生成的可执行文件已经可执行文件。

有关bash采购的更多详细信息,请参见手册页,下面复制的相关部分:

  

. filename [arguments] {
{1}}

     

在当前shell环境中从filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态。

     

如果filename不包含斜杠,则使用PATH中的文件名来查找包含文件名的目录。

     

在PATH中搜索的文件无需执行。当bash不处于posix模式时,如果在PATH中找不到文件,则搜索当前目录。

     

如果关闭shopt builtin命令的sourcepath选项,则不会搜索PATH。

     

如果提供了任何参数,它们将成为执行文件名时的位置参数。否则位置参数不变。

     

返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令,则为0),如果找不到或无法读取文件名,则返回false。