Что такое линия "Шебанг"?
В настоящее время я пытаюсь начать программирование на моем новом Mac. Я установил TextWrangler и выбрал C++ в качестве языка выбора; так как у меня есть некоторые предварительные знания об этом, когда я использовал Windows.
Итак, я написал очень распространенную программу "Hello World". Хотя, когда я попытался запустить его, я получил ошибку:
Msgstr "Этот файл не содержит правильной строки 'shebang' (код ошибки приложения: 13304)"
Я попытался найти код ошибки, чтобы выяснить, как это исправить, но ничего не смог найти... Я понятия не имею, что такое строка "шебанг"... Может кто-нибудь мне помочь?
6 ответов
Похоже, что вы пытаетесь запустить исходный файл напрямую, однако вам нужно будет скомпилировать его с помощью компилятора C++, например, включенного в gcc (GNU Compiler Collection), который содержит компилятор C++ g++
для Mac. Это не входит в Mac, вы должны сначала загрузить его:
http://www.tech-recipes.com/rx/726/mac-os-x-install-gcc-compiler/: "Чтобы установить компилятор gcc, загрузите пакет xcode с http://connect.apple.com/. Вам необходимо зарегистрировать учетную запись Apple Developer Connection. После того, как вы зарегистрируетесь, войдите в систему и нажмите "Загрузить программное обеспечение", а затем "Инструменты разработчика". Найдите ссылку "Скачать" рядом с Xcode Tools (версия) - образ компакт-диска и щелкните по нему!"
После установки, если вы собираетесь на Hello World, то из окна терминала в каталоге вашего исходного файла вы можете выполнить команду g++ HelloWorld.cpp -o HelloWorld
, Тогда вы сможете запустить его как ./HelloWorld
,
Кроме того, если вы пришли из мира Visual Studio, вы можете попробовать Mono и MonoDevelop. Mono - это бесплатная реализация C# (и других языков), а MonoDevelop - IDE, которая очень похожа на Visual Studio. MonoDevelop поддерживает C# и другие языки.NET, включая Visual Basic .NET, а также разработку на C/C++. Я не использовал его широко, но, похоже, он очень похож на VS, так что вам не придется изучать все новое за день. Я также использовал KDevelop, который мне очень понравился, когда я его использовал, хотя это было давно. Он имеет большую поддержку для разработки в стиле GNU на C/C++ и, насколько я помню, был очень мощным.
Удачи в ваших начинаниях!
Ссылки:
- Mono: http://mono-project.com/Main_Page
- MonoDevelop: http://monodevelop.com/
- KDevelop: http://kdevelop.org/
Вы должны сначала скомпилировать его с помощью компилятора. Я предполагаю, что вы пытались запустить исходный файл как ./source
но C++ не работает таким образом.
Однако в некоторых компиляторах вы можете указать строку shebang в качестве первой строки исходного файла (#!
известна как шебанг или хрустбанг, отсюда и название), вот так:
#!/path/to/compiler
Чтобы оболочка знала, какое приложение используется для запуска файлов такого типа, и когда вы попытаетесь запустить исходный файл самостоятельно, компилятор скомпилирует и запустит его для вас. Однако это зависит от компилятора, поэтому я рекомендую просто компилировать с помощью G++ или любого другого компьютера Mac, чтобы получить исполняемый файл, а затем запустить его.
Хотя я бы не рекомендовал это для обычной разработки C++, я использую простую оболочку сценария оболочки для небольших утилит 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;
}
Строки, начинающиеся с такого шаблона: #!/.../.../.. называются линией шебанга. Другими словами, shebang - это последовательность символов, состоящая из знака числа символов и восклицательного знака (#!). В Unix-подобных операционных системах, когда текстовый файл с shebang используется как исполняемый файл, загрузчик программы механизм анализирует оставшуюся часть начальной строки файла как директиву интерпретатора. Загрузчик выполняет указанную программу интерпретатора, передавая ей в качестве аргумента путь, который изначально использовался при попытке запустить сценарий, чтобы программа могла использовать файл в качестве входных данных.
Шебанг это http://en.wikipedia.org/wiki/Shebang_%28Unix%29.
не уверен, почему ваша программа не работает. вам нужно будет скомпилировать и связать, чтобы сделать исполняемый файл.
Если вы на Mac, то делаете что-то вроде этого в командной строке:
g++ -o program program.cpp
Скомпилирует и свяжет вашу программу в исполняемый файл program
, Тогда вы можете запустить его так:
./program
Причина, по которой вы получили ошибку 'shebang', возможно, в том, что вы пытались запустить файл cpp следующим образом:
./program.cpp
И оболочка пытается найти интерпретатор для запуска кода в файле. Поскольку это C++, соответствующего интерпретатора нет, но если ваш файл содержит Python или Bash, то строка будет выглядеть следующим образом
#!/usr/bin/python
в 1-й строке вашего исходного файла будет указана оболочка для использования интерпретатора Python
Что меня смущает (/ интересно), так это программа на С ++, выдающая ошибку "линия Шебанга". Строка Shebang - это способ для Unix-подобной операционной системы указать, какую программу следует использовать для интерпретации остальной части файла. Линия Шебанга обычно указывает на путь переводчика. C++ является скомпилированным языком и не имеет интерпретатора для него.
Чтобы получить реальную техническую информацию о том, как работают линии shebang, сделайте man execve и получите эту страницу руководства онлайн здесь - man execve.