什么是'shebang'线?
What is a 'shebang' line?
目前我正尝试在我的新Mac上开始编程。我安装了TextWrangler,并选择了c++作为我的首选语言;因为我从使用Windows时就对它有所了解。
所以,我写了一个非常普通的"Hello World"程序。虽然,当我试图运行它时,我得到了一个错误:
"此文件似乎不包含有效的' shebang '行(应用程序错误码:13304)"
我试着搜索错误代码来找出如何解决这个问题,但我找不到任何东西。我不知道什么是"shebang"线…有人能帮我一下吗?
你需要先用编译器编译它。我假设您尝试像./source
那样运行源文件,但c++不这样工作。
#!
被称为shebang或crunchbang,因此名称),如下所示:#!/path/to/compiler
这样shell就知道使用什么应用程序来运行这种类型的文件,当您尝试自己运行源文件时,编译器将为您编译并运行它。这是一个依赖于编译器的特性,所以我建议直接用g++或其他mac电脑用来编译可执行文件,然后运行它。
虽然我不推荐它用于常规的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;
}
它确实显示您正在尝试直接运行源文件,但是您需要使用c++编译器进行编译,例如gcc (GNU编译器集合)中包含的包含Mac的c++编译器g++
。它不包含在Mac中,您必须先下载它:
from http://www.tech-recipes.com/rx/726/mac-os-x-install-gcc-compiler/: "要安装gcc编译器,请从http://connect.apple.com/下载xcode包。你需要注册一个Apple Developer Connection帐户。注册后,登录并单击下载软件,然后单击开发人员工具。找到Xcode Tools (version) - 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风格的开发有很多支持,而且在我的记忆中非常强大。
祝你好运!
链接:
- Mono: http://mono-project.com/Main_Page MonoDevelop: http://monodevelop.com/
- KDevelop: http://kdevelop.org/
shebang is http://en.wikipedia.org/wiki/Shebang_%28Unix%29.
不确定为什么您的程序没有运行。您将需要编译和链接以生成可执行文件。
我发现令人困惑(/有趣)的是c++程序给出"Shebang line"错误。Shebang行是类Unix操作系统指定应该使用哪个程序来解释文件其余部分的一种方式。shebang线通常指向解释器的路径。c++是编译语言,没有解释器。
要获得shebang行如何工作的真正技术细节,执行man execve并在这里在线获取该手册页- man execve。
如果你在mac上,那么在命令行上做这样的操作:
g++ -o program program.cpp
将编译并链接你的程序到一个名为program
的可执行文件。然后你可以像这样运行它:
./program
你得到'shebang'错误的原因可能是因为你试图像这样运行cpp文件:
./program.cpp
shell试图找到一个解释器来运行文件中的代码。因为这是c++,所以没有相关的解释器但如果你的文件包含Python或Bash那么像这样的行
#!/usr/bin/python
将告诉shell使用python解释器
以如下模式开头的行:#!/…/…/…叫做shebang线。换句话说,shebang是由数字、符号和感叹号(#!)组成的字符序列。在类unix操作系统中,当将带有shebang的文本文件当作可执行文件使用时,程序加载器机制将文件初始行的其余部分解析为解释器指令。加载器执行指定的解释器程序,将试图运行脚本时最初使用的路径作为参数传递给它,以便程序可以使用该文件作为输入数据。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 我应该使用什么来代替void作为变体中的替代类型之一
- 什么是'shebang'线?