Что такое линия "Шебанг"?

В настоящее время я пытаюсь начать программирование на моем новом 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++ и, насколько я помню, был очень мощным.

Удачи в ваших начинаниях!

Ссылки:

Вы должны сначала скомпилировать его с помощью компилятора. Я предполагаю, что вы пытались запустить исходный файл как ./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.

Другие вопросы по тегам