C++ — How to create an executable out of my program? [closed]
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago .
I know how to make C++ programs that can generate output to the terminal/files, but I have to use the terminal/an IDE to do so. How do i make a program executable, so that I can execute it when I click on it.
3 Answers 3
if you are using linux with gcc/g++ command line compile tool,
compile the program with:
you can add execute permission to the file with the command:
and then double click it, it will execute
if you are using windows, and developing under a IDE (like visual studio)
- find the build executable under the project folder, and it should be able to execute by double clicking.
If you are using an IDE, there should be an option to make an executable. Depending on your OS you will have to use a compiler compile your program. For instance
This will make you an executable program called sampleExecutable. g++ is the compiler used in this instance.
From source code to executables¶
When you write a C++ program, you start with the source code. That’s a human-readable notation of the program, in the C++ programming language. For example a program that writes the text “Hello world!” to a console window looks like
You write this text using any plain text editor you like (e.g. Notepad++ or Vim, but not a rich text editor like Word or Open Office Writer). The colors are just added here and by good editors automatically to make the code more readable (that feature is called syntax highlighting); you do not set them yourself in any way and they do not influence the program behaviour. The file is usually saved as with a .cpp file name extension to make it clear that this is a C++ source code file. You might also encounter the .cc or .cxx extensions.
Computers cannot execute such a source file, they must be translated into binary processor instructions first. Thus, next step is to feed this program to a compiler, which does this translation for us. There is a multitude of ways of doing that, depending on the compiler. The compiler then takes the source file and “compiles” it into an executable program which you can then start.
More complex programs will usually consist of multiple C++ files which are then separately compiled into intermediate output files (usually with a .o or .obj extension) and then “linked” together by a program called linker to an executable. In fact, even if just a single source file is compiled into an executable, the compiler automatically invokes the linker behind the scenes.
Thus, the steps are
- Write source code. Tool: editor; result: .cpp -File
- Compile source code to object file. Tool: compiler; result: intermediate object file
- Link object file to executable. Tool: linker; result: executable File ( .exe on Windows, without extension on Unix-like systems like MacOS and Linux).




10: Скопируйте и вставьте следующий код в новый файл main.cpp:Вы должны выглядеть так:
- Нажмите «Отладка» -> «Старт без отладки» (или нажмите ctrl + F5):
- Готово. Вы должны получить следующий вывод консоли:

Компиляция с Clang
Поскольку front-end Clang предназначен для совместимости с GCC, большинство программ, которые могут быть скомпилированы через GCC, будут скомпилированы, когда вы замените g++ на clang++ в сценариях сборки. Если no -std=version задана, будет использоваться gnu11.
Пользователи Windows, которые используются для MSVC, могут поменять cl.exe на clang-cl.exe . По умолчанию clang пытается быть совместимым с самой высокой версией MSVC, которая была установлена.
В случае компиляции с визуальной студией clang-cl можно использовать, изменив Platform toolset в свойствах проекта.
В обоих случаях clang совместим только с его интерфейсом, хотя он также пытается генерировать двоичные файлы совместимых объектов. Пользователи clang-cl должны заметить, что совместимость с MSVC еще не завершена .
Чтобы использовать clang или clang-cl, можно использовать установку по умолчанию в некоторых дистрибутивах Linux или в комплекте с IDE (например, XCode на Mac). Для других версий этого компилятора или на платформах, для которых это не установлено, это можно загрузить с официальной страницы загрузки .
Если вы используете CMake для создания кода, вы обычно можете переключать компилятор, задав переменные окружения CC и CXX следующим образом:
Компиляторы онлайн
Различные веб-сайты предоставляют онлайн-доступ к компиляторам C ++. Набор функций онлайн-компилятора значительно варьируется от сайта к сайту, но обычно они позволяют сделать следующее:
- Вставьте свой код в веб-форму в браузере.
- Выберите некоторые параметры компилятора и скомпилируйте код.
- Собирать компилятор и / или выпуск программы.
Онлайн-поведение веб-компилятора обычно является довольно ограничительным, поскольку они позволяют кому-либо запускать компиляторы и выполнять произвольный код на своей стороне сервера, тогда как обычно удаленное выполнение произвольного кода считается уязвимостью.
Компиляторы онлайн могут быть полезны для следующих целей:
- Запустите небольшой фрагмент кода с компьютера, на котором отсутствует компилятор C ++ (смартфоны, планшеты и т. Д.).
- Убедитесь, что код успешно компилируется с разными компиляторами и работает одинаково, независимо от компилятора, с которым он был скомпилирован.
- Изучайте или преподавайте основы C ++.
- Изучите современные возможности C ++ (C ++ 14 и C ++ 17 в ближайшем будущем), когда современный компилятор C ++ недоступен на локальной машине.
- Найдите ошибку в своем компиляторе по сравнению с большим набором других компиляторов. Проверьте, исправлена ли ошибка компилятора в будущих версиях, которые недоступны на вашем компьютере.
- Решите проблемы онлайн-судьи.
Какие онлайн-компиляторы не должны использоваться для:
- Разработка полнофункциональных (даже небольших) приложений с использованием C ++. Обычно онлайн-компиляторы не позволяют связываться со сторонними библиотеками или загружать артефакты сборки.
- Выполнять интенсивные вычисления. Ресурсы на стороне Sever ограничены, поэтому любая пользовательская программа будет убита через несколько секунд после ее выполнения. Допустимое время выполнения обычно достаточно для тестирования и обучения.
- Сам сервер компилятора атаки или сторонние хосты в сети.
Отказ от ответственности: автор (ы) документации не связаны ни с какими ресурсами, перечисленными ниже. Веб-сайты перечислены в алфавитном порядке.
- http://codepad.org/ Онлайн-компилятор с совместным использованием кода. Редактирование кода после компиляции с предупреждением или ошибкой исходного кода работает не так хорошо.
- http://coliru.stacked-crooked.com/ Онлайн-компилятор, для которого вы указываете командную строку. Предоставляет компиляторы GCC и Clang для использования.
- http://cpp.sh/ — Онлайн-компилятор с поддержкой C ++ 14. Не позволяет редактировать командную строку компилятора, но некоторые параметры доступны через элементы управления графическим интерфейсом.
- https://gcc.godbolt.org/ — Предоставляет широкий список версий, архитектуры и разборки компилятора. Очень полезно, когда вам нужно проверить, что ваш код компилируется разными компиляторами. GCC, Clang, MSVC ( CL ), компилятор Intel ( icc ), ELLCC и Zapcc, причем один или несколько из этих компиляторов доступны для ARM, ARMv8 (как ARM64), Atmel AVR, MIPS, MIPS64, MSP430, PowerPC , x86 и x64 architecutres. Аргументы командной строки компилятора могут быть отредактированы.
- https://ideone.com/ — Широко используется в сети для иллюстрации поведения фрагмента кода. Предоставляет GCC и Clang для использования, но не позволяет редактировать командную строку компилятора.
- http://melpon.org/wandbox — Поддерживает многочисленные версии компилятора Clang и GNU / GCC.
- http://onlinegdb.com/ — крайне минималистичная среда разработки, включающая редактор, компилятор (gcc) и отладчик (gdb).
- http://rextester.com/ — Предоставляет компиляторы Clang, GCC и Visual Studio для C и C ++ (наряду с компиляторами для других языков), с доступной для использования библиотекой Boost.
- http://tutorialspoint.com/compile_cpp11_online.php — полнофункциональная оболочка UNIX с GCC и удобный для пользователя проект.
- http://webcompiler.cloudapp.net/ — Компилятор Online Visual Studio 2015, предоставленный Microsoft в составе RiSE4fun.
Процесс компиляции C ++
Когда вы разрабатываете программу на C ++, следующим шагом является компиляция программы перед ее запуском. Компиляция — это процесс, который преобразует программу, написанную на удобочитаемом языке, такую как C, C ++ и т. Д., В машинный код, который прямо понимается Центральным процессором. Например, если у вас есть исходный код C ++ с именем prog.cpp, и вы выполняете команду компиляции,
Существует четыре основных этапа, связанных с созданием исполняемого файла из исходного файла.
Препроцессор C ++ принимает файл исходного кода C ++ и обрабатывает заголовки (#include), макросы (#define) и другие директивы препроцессора.
Расширенный исходный код C ++, созданный препроцессором C ++, скомпилирован на язык ассемблера для платформы.
Код ассемблера, сгенерированный компилятором, собран в код объекта для платформы.
Файл объектного кода, созданный ассемблером, связан вместе
с объектными кодами для любых библиотечных функций, используемых для создания библиотеки или исполняемого файла.
предварительная обработка
Препроцессор обрабатывает директивы препроцессора, такие как #include и #define. Это агностик синтаксиса C ++, поэтому его следует использовать с осторожностью.
Он работает в одном исходном файле C ++ за раз, заменяя директивы #include содержимым соответствующих файлов (обычно это просто объявления), выполняет замену макросов (#define) и выбирает разные части текста в зависимости от #if, #ifdef и #ifndef.
Препроцессор работает над потоком токенов предварительной обработки. Макрозамена определяется как замена токенов другими токенами (оператор ## позволяет слить два токена, когда это имеет смысл).
После этого препроцессор создает один вывод, который представляет собой поток токенов, полученный в результате описанных выше преобразований. Он также добавляет некоторые специальные маркеры, которые сообщают компилятору, откуда появилась каждая строка, чтобы он мог использовать их для создания разумных сообщений об ошибках.
На этом этапе могут быть сделаны некоторые ошибки с умным использованием директив #if и #error.
Используя ниже флаг компилятора, мы можем остановить процесс на этапе предварительной обработки.
компиляция
Шаг компиляции выполняется на каждом выходе препроцессора. Компилятор анализирует чистый исходный код C ++ (теперь без каких-либо предпроцессорных директив) и преобразует его в код сборки. Затем вызывает базовый сервер (ассемблер в toolchain), который собирает этот код в машинный код, производящий фактический двоичный файл в некотором формате (ELF, COFF, a.out, . ). Этот объектный файл содержит скомпилированный код (в двоичной форме) символов, определенных на входе. Символы в объектных файлах называются по имени.
Файлы объектов могут ссылаться на символы, которые не определены. Это тот случай, когда вы используете декларацию и не предоставляете определение для нее. Компилятор не возражает против этого и будет с удовольствием создавать объектный файл до тех пор, пока исходный код будет правильно сформирован.
Компиляторы обычно позволяют прекратить компиляцию на этом этапе. Это очень полезно, потому что с ним вы можете скомпилировать каждый исходный код отдельно. Преимущество этого заключается в том, что вам не нужно перекомпилировать все, если вы меняете только один файл.
Созданные объектные файлы могут быть помещены в специальные архивы, называемые статическими библиотеками, для более легкого повторного использования позже.
На этом этапе сообщается о «регулярных» ошибках компилятора, таких как синтаксические ошибки или ошибки с ошибками при перегрузке.
Чтобы остановить процесс после этапа компиляции, мы можем использовать параметр -S:
монтаж
Ассемблер создает объектный код. В системе UNIX вы можете видеть файлы с суффиксом .o (.OBJ на MSDOS), чтобы указать файлы объектных кодов. На этом этапе ассемблер преобразует эти объектные файлы из кода сборки в инструкции машинного уровня, а созданный файл является перемещаемым объектным кодом. Следовательно, на этапе компиляции создается перемещаемая объектная программа, и эта программа может использоваться в разных местах без повторной компиляции.
Чтобы остановить процесс после шага сборки, вы можете использовать опцию -c:
соединение
Линкером является то, что дает окончательный результат компиляции из файлов объектов, созданных ассемблером. Этот вывод может быть либо общей (или динамической) библиотекой (и, хотя имя похоже, они не имеют много общего со статическими библиотеками, упомянутыми ранее), либо исполняемый файл.
Он связывает все объектные файлы, заменяя ссылки на неопределенные символы правильными адресами. Каждый из этих символов может быть определен в других объектных файлах или в библиотеках. Если они определены в библиотеках, отличных от стандартной библиотеки, вам нужно сообщить об этом компоновщику.
На этом этапе наиболее распространенными ошибками являются отсутствующие определения или дублирующие определения. Первое означает, что либо определения не существуют (т.е. они не написаны), либо что объектные файлы или библиотеки, в которых они находятся, не были предоставлены компоновщику. Последнее очевидно: один и тот же символ был определен в двух разных объектных файлах или библиотеках.
Компиляция с помощью кода :: Блоки (графический интерфейс)
Загрузите и установите Code :: Blocks здесь . Если вы находитесь в Windows, будьте осторожны, чтобы выбрать файл, для которого имя содержит mingw , другие файлы не устанавливают компилятор.
Откройте код :: Блоки и нажмите «Создать новый проект»:
Выберите «Консольное приложение» и нажмите «Перейти»:
Нажмите «Далее», выберите «C ++», нажмите «Далее», выберите имя для своего проекта и выберите папку для ее сохранения, нажмите «Далее» и затем нажмите «Готово».
Теперь вы можете редактировать и компилировать свой код. Код по умолчанию, который печатает "Hello world!" в консоли уже есть. Чтобы скомпилировать и / или запустить вашу программу, нажмите одну из трех кнопок компиляции / запуска на панели инструментов:
Для компиляции без запуска нажмите
, для запуска без компиляции снова нажмите
и компилировать, а затем запускать, нажмите
,
Компиляция и запуск по умолчанию «Hello world!» код дает следующий результат:
Урок №5. Компиляция вашей первой программы
Перед написанием нашей первой программы мы еще должны кое-что узнать.
Теория
Во-первых, несмотря на то, что код ваших программ находится в файлах .cpp, эти файлы добавляются в проект. Проект содержит все необходимые файлы вашей программы, а также сохраняет указанные вами настройки вашей IDE. Каждый раз, при открытии проекта, он запускается с того момента, на котором вы остановились в прошлый раз. При компиляции программы, проект говорит компилятору и линкеру, какие файлы нужно скомпилировать, а какие связать. Стоит отметить, что файлы проекта одной IDE не будут работать в другой IDE. Вам придется создать новый проект (в другой IDE).
Во-вторых, есть разные типы проектов. При создании нового проекта, вам нужно будет выбрать его тип. Все проекты, которые мы будем создавать на данных уроках, будут консольного типа. Это означает, что они запускаются в консоли (аналог командной строки). По умолчанию, консольные приложения не имеют графического интерфейса пользователя — GUI (сокр. от «Graphical User Interface») и компилируются в автономные исполняемые файлы. Это идеальный вариант для изучения языка C++, так как он сводит всю сложность к минимуму.
В-третьих, при создании нового проекта большинство IDE автоматически добавят ваш проект в рабочее пространство. Рабочее пространство — это своеобразный контейнер, который может содержать один или несколько связанных проектов. Несмотря на то, что вы можете добавить несколько проектов в одно рабочее пространство, все же рекомендуется создавать отдельное рабочее пространство для каждой программы. Это намного упрощает работу для новичков.
Традиционно, первой программой на новом языке программирования является всеми известная программа «Hello, world!». Мы не будем нарушать традиции
Пользователям Visual Studio
Для создания нового проекта в Visual Studio 2019, вам нужно сначала запустить эту IDE, затем выбрать «Файл» > «Создать» > «Проект» :

Дальше появится диалоговое окно, где вам нужно будет выбрать «Консольное приложение Windows» из вкладки «Visual C++» и нажать «ОК» :

Также вы можете указать имя проекта (любое) и его расположение (рекомендую ничего не менять) в соответствующих полях.
В текстовом редакторе вы увидите, что уже есть некоторый текст и код — удалите его, а затем напечатайте или скопируйте следующий код: