什么是'shebang'系列?

时间:2011-08-15 03:25:05

标签: c++ shebang textwrangler

目前我正在尝试在我的新Mac上开始编程。我安装了TextWrangler,并选择了C ++作为我选择的语言;因为我对它有一些先验知识,从我使用Windows时开始。

所以,我写了一个如此常见的“Hello World”计划。虽然,当我试图运行它时,我收到了一个错误:

“此文件似乎不包含有效的'shebang'行(应用程序错误代码:13304)”

我尝试搜索错误代码以了解如何解决这个问题,但我找不到任何东西......我不知道'shebang'系列是什么......有人可以帮帮我吗?

7 个答案:

答案 0 :(得分:4)

您需要先使用编译器进行编译。我假设您尝试像./source那样运行源文件,但C ++不能以这种方式运行。

但是,对于某些编译器,您可以提供 shebang-line 作为源文件的第一行(#!称为 shebang 或{ {3}},因此名称),如下:

#!/path/to/compiler

因此shell知道用于运行该类文件的应用程序,并且当您尝试单独运行源文件时,编译器将为您编译并运行它。这是一个依赖于编译器的功能,所以我建议只使用G ++进行简单编译,或者使用Mac来获取可执行文件,然后运行它。

答案 1 :(得分:2)

您确实尝试直接运行源文件,但是您需要使用C ++编译器进行编译,例如包含C ++编译器的{gcc(GNU编译器集合)中包含的编译器g++对于Mac。它不包含在Mac中,您必须先下载它:

来自http://www.tech-recipes.com/rx/726/mac-os-x-install-gcc-compiler/:“要安装gcc编译器,请从http://connect.apple.com/下载xcode包。您需要注册Apple Developer Connection帐户。一旦注册,登录并点击下载软件,然后下载开发人员工具。找到Xcode Tools(版本)旁边的下载链接 - CD Image并单击它!“

安装完成后,如果您要使用快速Hello World,则可以从源文件目录中的终端窗口执行命令g++ HelloWorld.cpp -o HelloWorld。然后你应该能够以./HelloWorld运行它。

此外,如果您来自Visual Studio世界,您可能想尝试Mono和MonoDevelop。 Mono是C#(和其他语言)的免费实现,MonoDevelop是一个与Visual Studio非常相似的IDE。 MonoDevelop支持C#和其他.NET语言,包括Visual Basic .NET,以及C / C ++开发。我没有广泛使用它,但它似乎与VS非常相似,所以你不必一天都学习新的东西。我也使用过KDevelop,我在使用它时非常喜欢它,虽然现在已经有一段时间了。它对C / C ++中的GNU风格开发有很多支持,并且我记得非常强大。

祝你好运!祝你好运!

链接:

答案 2 :(得分:0)

shebang是http://en.wikipedia.org/wiki/Shebang_%28Unix%29

不确定为什么你的程序没有运行。您将需要编译和链接以生成可执行文件。

答案 3 :(得分:0)

我觉得令人困惑(/有趣)的是C ++程序给出“Shebang line”错误。 Shebang line是Unix操作系统的一种方式,用于指定应该使用哪个程序来解释文件的其余部分。 shebang线通常指向解释器的路径。 C ++是一种编译语言,没有解释器。

要获得有关shebang线路如何工作的真实技术细节,请执行 man execve 并在线获取该手册页 - man execve

答案 4 :(得分:0)

如果您使用的是Mac,请在命令行上执行以下操作:

g++ -o program program.cpp

将您的程序编译并链接到名为program的可执行文件中。然后你可以运行它:

./program

您收到'shebang'错误的原因可能是因为您尝试运行cpp文件,如:

./program.cpp

shell试图找到一个解释器来运行文件中的代码。因为这是C ++,所以没有相关的解释器,但如果你的文件包含Python或Bash,那么就有这样的一行

#!/usr/bin/python

在源文件的第1行将告诉shell使用python解释器

答案 5 :(得分:0)

虽然我不建议将它用于常规C ++开发,但我使用简单的shell脚本包装器来实现小型C ++实用程序。这是一个Hello World示例:

#if 0  // -- build and run wrapper script for C++ ------------------------------
TMP=$(mktemp -d)
c++ -o ${TMP}/a.out ${0} && ${TMP}/a.out ${@:1} ; RV=${?}
rm -rf ${TMP}
exit ${RV}
#endif // ----------------------------------------------------------------------

#include <iostream>

int main(int argc, char *argv[])
{
  std::cout << "Hello world" << std::endl;
  return 0;
}

答案 6 :(得分:0)

以这样的模式开头的行:#!/.../.../ ..被称为shebang行。换句话说,shebang是由字符数字符号和感叹号(#!)组成的字符序列。在类似Unix的操作系统中,当使用带有shebang的文本文件就好像它是可执行文件时,程序加载器机制将文件的其余所有初始行作为解释器指令进行解析。加载程序执行指定的解释程序,并将尝试运行脚本时最初使用的路径作为参数传递给该解释程序,以便程序可以将该文件用作输入数据。