Перейти к содержимому

Как из cpp сделать exe

  • автор:

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

  1. Write source code. Tool: editor; result: .cpp -File
  2. Compile source code to object file. Tool: compiler; result: intermediate object file
  3. Link object file to executable. Tool: linker; result: executable File ( .exe on Windows, without extension on Unix-like systems like MacOS and Linux).

[ -<Latex[length=4mm]>, auto, node distance=6em, file/.style=<rectangle, draw, align=center>, start/.style= <circle, fill, draw>] \node (start) [start] <>; \node (cpp) [file, right=of start] <Source file\\\texttt<*.cpp>, \texttt<*.cc>>; \node (obj) [file,right=of cpp] <Object file\\\texttt<*.o>, \texttt<*.obj>>; \node (exe) [file,right=of obj] <Executable file\\\texttt<*.exe>, w/o extension>; \path (start) edge node <Editor>(cpp) (cpp) edge node <Compiler>(obj) (obj) edge node <Linker>(exe);» /></p>
<p>From source code to executables.</p>
<h3>How To: Install a compiler¶</h3>
<p>Note that nowaydays every compiler comes with a linker, so there is no need to install an extra linker.</p>
<h4>Windows¶</h4>
<p>On Windows, I recommend using Microsoft’s free <strong>Visual Studio Community Edition</strong>. At the time of this writing, the most recent version (which we will of course use) is 2015 Update 3, downloadable at https://www.visualstudio.com/. When you download and run the installer, be sure to tick the checkbox under Programming Languages ‣ Visual C++ ‣ Common Tools For Visual C++ 2015 (Visual Studio supports multiple programming languages and C++ is not among the defaults). You can untick any checkboxes saying something about Windows Phone or .NET.</p>
<p>I will refer to this compiler as MSVC .</p>
<h4>Debian/Ubuntu based Linux¶</h4>
<h3>How To: Compile your source code¶</h3>
<p>(Assuming you saved your file as hello_world.cpp )</p>
<h4>Windows¶</h4>
<p>Open the <strong>VS2013 x86 Native Tools Command Prompt</strong>. It is located in the start menu (or whatever you call it nowadays) at Visual Studio 2013 ‣ Visual Studio Tools . Then change the current directory to the folder where you saved your file using cd , e.g. cd C:\Users\ <em>YOURNAME</em> \somefolder\somesubfolder .</p>
<p>If your source code is on a drive different from the one where the initial directory of the command prompt is, use the cd /D <em>YOURDIRECTORY</em> command (the /D option means “change the Drive if necessary”).</p>
<p>Compiling is then done with the command cl /EHsc /W4 hello_world.cpp . You should now see (among others) a new file hello_wold.exe . You can check in the command prompt by typing dir . If you want to execute your program now, type hello_world , and you should see a line Hello world! appearing in the console window.</p>
<h5>The compiler command¶</h5>
<p>Let’s break down the compiler command.</p>
<p>cl is the name of Microsoft’s compiler. The things preceded by slashes / are options which tell the compiler how to process your source code. /EHsc tells it to enable so called <em>exceptions</em>, which really should be enabled by default but isn’t. You don’t need to understand this, just remember to add this option whenever you compile C++ code. /W4 stands for “warning level 4” and tells the compiler to tell you about any suspicious things it notices in your source code (this also should be a default but sadly isn’t in any compiler I know of). hello_world.cpp is obviously the name of the source file to compile.</p>
<h4>Linux¶</h4>
<p>Open a terminal and change the current directory to the one containing your source file. Then execute g++ -std=c++14 -Wall -Wextra -ohello_world hello_world.cpp . An executable hello_world should now appear. You can check in the terminal by typing ls . If you want to execute your program now, type ./hello_world , and you should see a line Hello world! appearing in the terminal.</p>
<h5>The compiler command¶</h5>
<p>Let’s break down the compiler command.</p>
<p>g++ is the name of the compiler. The things preceded by dashes — are options which tell the compiler how to process your source code. -std=c++14 tells it that we want to use the newest C++14 standard. -Wall and -Wextra tell the compiler to tell you about any suspicious things it notices in your source code (this should be a default but sadly isn’t in any compiler I know of). -ohello_world means “output ( -o ) as hello_world ” and simply specifies the name of the executable to produce. If you leave this option out, it will be called a.out . hello_world.cpp is obviously the name of the source file to compile.</p>
<h4>A few command line tips¶</h4>
<p>To use the command line effectively, I recommend reading a good tutorial [1]. I will, however, give a few tips here:</p>
<ul>
<li>You can use the Up and Down keys to cycle through your last commands. For example, if you want to run the last command again, just press Up again, and the command will reappear, ready to be edited or directly started with Return .</li>
<li>You can use the Tab key to complete filenames: for instance, if you typed hel and the file hello_world.cpp is in the current directory, you can press Tab to complete the filename.</li>
<li>Pressing Ctrl+C quits the running console program and drops you back to the command prompt, without closing the console window.</li>
<li>On Linux, use the ls or ls -l command to show the files and subdirectories in the current directory. On Windows, dir does that.</li>
<li>To open the current directory in your GUI file system browser (e.g. Nautilus, Dolphin or Windows Explorer) Use xdg-open . on Linux and explorer . on Windows.</li>
</ul>
<h2>The Hello World program analyzed¶</h2>
<p>Now that you have compiled and run the Hello World program, you are probably curious what all these cryptic lines in the source code mean. Let’s repeat our little program here:</p>
<h3>Linewise breakdown¶</h3>
<h4>Preprocessor #includes¶</h4>
<p>Let’s start with the first line: This is a so-called preprocessor directive more specifically an <em>include directive</em>. It instructs to compiler to read the iostream file and paste it contents in place of the directive, just as if we had written the whole file’s content there instead of just the #include . We need this file because it tells the compiler what std::cout in line 5 means. It is part of the <em>standard library</em>, a set of files that comes with every C++ compiler.</p>
<h4>Whitespace¶</h4>
<p>The second line is empty, it has no special meaning. I just inserted it to make the source code look nicer. Generally, C++ ignores all <em>whitespace</em> (that’s how programmers collectively call spaces, tab(ulator)s and line breaks), except that they are sometimes needed to separate words. The only time where this was needed in this program is the space between int and main in line 3. The second case where whitespace has a meaning is preprocessor directives: Here, a line break is needed to tell the compiler where it ends. This means that, if I wanted, I could have written the entire program as short as</p>
<p>and it would mean exactly the same as the long version. Oh yes, I have also left the space between Hello and world there, but that will become obvious when we get to line 5. One can also insert as many whitespace as one wants, for example:</p>
<p>Pretty much the only place where you cant freely sprinkle whitespace is in preprocessor directives (the #include -directive in our Hello World program), where everything must be written on one line, meaning that exactly the following line breaks are illegal in the program above:</p>
<p>Of course, you also can’t insert whitespace in the middle of words like writing c out instead of cout , and there are a few other exceptions in the form of symbols that are written using more than one character, namely the << and the :: in the program above, that could not have been written as e.g. < < and : : .</p>
<p>However, I think you see why I wrote the program like I did in the first place: it is just easier to read.</p>
<h4>Defining the main program¶</h4>
<p>Now it starts to get interesting!</p>
<p>The third line basically says to the compiler: “Here comes the main program!” [2], and the curly braces show the compiler where it starts ( < in line 4) and ends ( >in line 6). Everything between them will be executed when the program is started.</p>
<h4>Writing to the console¶</h4>
<p>This line really is the only one that is actually executed at runtime. It is a so called <em>statement</em>. These are really “instructions”, or “commands” that instruct the computer to do something. In this case, it tells the computer to print the text “Hello world!” followed by a line break ( \n ) to the standard output ( std::cout ) [3]. For now, you can thus think of the << symbol symbol as meaning “Print the value at the right hand side to the thing on the left hand side”. [4] The value here is the text between the quotes ( " ). Such quoted text will be printed as you typed it, except that a backslash \ is used to give the next character a special meaning (like the line break/newline character for \n ).</p>
<p>Statements are always terminated with a semicolon ( ; ).</p>
<h3>Successive Statements¶</h3>
<p>Of course we can write more than just one statement in the main program. Let’s throw in some more output statements:</p>
<p>As you probably expected, this will print:</p>
<p>The statements are executed in the same order as you write them.</p>
<p>It has no special meaning that I wrote the last two statements in the same line. As I already said , the compiler does not care about whitespace such as line breaks. It determines where one statement ends and the next one starts based on the semicolons. However, you should generally write only one statement per line. The above was just for demonstration purposes, it’s no good style.</p>
<h3>More output¶</h3>
<p>Here are are a two more things you can do with cout , which will be useful later on:</p>
<p>You can omit the trailing \n in the output text, so that the next output statement will continue in the line started by the former:</p>
<h2>C++ <br />Компиляция и строительство</h2>
<p>Программы, написанные на C ++, должны быть скомпилированы до их запуска. В зависимости от вашей операционной системы доступно большое количество компиляторов.</p>
<h3>замечания</h3>
<p>Большинство операционных систем поставляются без компилятора, и их необходимо установить позже. Некоторые общие варианты компиляторов:</p>
<ul>
<li>GCC, сборник компиляторов GNUg ++</li>
<li>clang: интерфейс семейства языков C для LLVMclang ++</li>
<li>MSVC, Microsoft Visual C ++ (входит в состав Visual Studio)visual-c ++</li>
<li>C ++ Builder, Embarcadero C ++ Builder (входит в RAD Studio) c ++ builder</li>
</ul>
<p>Пожалуйста, обратитесь к соответствующему руководству по компиляции, о том, как скомпилировать программу на C ++.</p>
<p>Другой вариант использования конкретного компилятора с его собственной конкретной системой сборки, можно позволить родовым системам сборки настраивать проект для конкретного компилятора или для установленного по умолчанию.</p>
<h3>Компиляция с помощью GCC</h3>
<p>Предполагая, что один исходный файл с именем main.cpp , команда для компиляции и ссылки на не оптимизированный исполняемый файл выглядит следующим образом (компиляция без оптимизации полезна для начальной разработки и отладки, хотя -Og официально рекомендуется для более новых версий GCC).</p>
<p>Чтобы создать оптимизированный исполняемый файл для использования в производстве, используйте один из опций -O (см .: -O1 , -O2 , -O3 , -Os , -Ofast ):</p>
<p>Если опция -O опущена, -O0, что означает отсутствие оптимизаций, используется по умолчанию (указание -O без номера разрешается на -O1).</p>
<p>Альтернативно, используйте флаги оптимизации из групп O (или более экспериментальных оптимизаций) напрямую. В следующем примере построена оптимизация -O2 плюс один флаг с уровня оптимизации -O3 :</p>
<p>Чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве с той же архитектурой), используйте:</p>
<p>Любой из вышеперечисленных файлов создаст двоичный файл, который можно запустить с .\app.exe в Windows и ./app в Linux, Mac OS и т. Д.</p>
<p>Флаг -o также может быть пропущен. В этом случае GCC создаст исполняемый файл a.exe по умолчанию a.exe Windows и a.out в Unix-подобных системах. Чтобы скомпилировать файл без его связывания, используйте параметр -c :</p>
<p>Это создает объектный файл с именем file.o который впоследствии может быть связан с другими файлами для создания двоичного файла:</p>
<p>Подробнее о вариантах оптимизации можно узнать на gcc.gnu.org . Особо следует отметить -Og (оптимизация с упором на опыт отладки — рекомендуется для стандартного цикла редактирования-компиляции-отладки) и -Ofast (все оптимизации, включая те, которые не соответствуют строгому соблюдению стандартов).</p>
<p>Флаг -Wall позволяет предупреждать многие распространенные ошибки и всегда должен использоваться. Для улучшения качества кода часто рекомендуется использовать -Wextra и другие предупреждающие флаги, которые автоматически не активируются -Wall и -Wextra .</p>
<p>Если код ожидает определенный стандарт C ++, укажите, какой стандарт использовать, включая флаг -std= . Поддерживаемые значения соответствуют году завершения для каждой версии стандарта ISO C ++. Начиная с GCC 6.1.0, допустимыми значениями для std= flag являются c++98 / c++03 , c++11 , c++14 и c++17 / c++1z . Значения, разделенные косой чертой, эквивалентны.</p>
<p>GCC включает некоторые расширения, специфичные для компилятора, которые отключены, когда они конфликтуют со стандартом, заданным флагом -std= . Для компиляции с включенными всеми расширениями может использоваться значение gnu++XX , где XX — любой из лет, используемых значениями c++ перечисленными выше.</p>
<p>Стандарт по умолчанию будет использоваться, если ни один не указан. Для версий GCC до 6.1.0 по умолчанию используется значение -std=gnu++03 ; в GCC 6.1.0 и выше по умолчанию используется -std=gnu++14 .</p>
<p>Обратите внимание, что из-за ошибок в GCC флаг -pthread должен присутствовать при компиляции и связывании для GCC для поддержки стандартных функций потоковой -pthread C ++, представленных с C ++ 11, таких как std::thread и std::wait_for . Опущение при использовании функций потоковой передачи может не приводить к появлению предупреждений, но недействительных результатов на некоторых платформах.</p>
<h3>Связывание с библиотеками:</h3>
<p>Используйте опцию -l для передачи имени библиотеки:</p>
<p>Если библиотека не находится в стандартном пути библиотеки, добавьте путь с параметром -L :</p>
<p>Несколько библиотек могут быть связаны между собой:</p>
<p>Если одна библиотека зависит от другой, поместите зависимую библиотеку <strong>перед</strong> независимой библиотекой:</p>
<p>Или дайте компоновщику определить само упорядочение через —start-group и —end-group (обратите внимание: это имеет значительную производительность):</p>
<h3>Компиляция с помощью Visual C ++ (командной строки)</h3>
<p>Для программистов, поступающих из GCC или Clang в Visual Studio, или программистов, более удобных с командной строкой в ​​целом, вы можете использовать компилятор Visual C ++ из командной строки, а также из среды IDE.</p>
<p>Если вы хотите скомпилировать свой код из командной строки в Visual Studio, сначала необходимо настроить среду командной строки. Это можно сделать, открыв Visual Studio Command Prompt / Developer Command Prompt / x86 Native Tools Command Prompt / x64 Native Tools Command Prompt или аналогичная (как предоставляется вашей версией Visual Studio) или в командной строке, путем перехода к подкаталог VC каталога установки компилятора (обычно \Program Files (x86)\Microsoft Visual Studio x\VC , где x — номер версии (например, 10.0 для 2010 или 14.0 для 2015) и запуск командного файла VCVARSALL с помощью параметр командной строки, указанный здесь .</p>
<p>Обратите внимание, что в отличие от GCC, Visual Studio не предоставляет интерфейс для компоновщика ( link.exe ) через компилятор ( cl.exe ), но вместо этого предоставляет компоновщик как отдельную программу, которую компилятор вызывает при выходе. cl.exe и link.exe могут использоваться отдельно с разными файлами и параметрами, иначе cl может передаваться файлы и параметры для link если обе задачи выполняются вместе. Любые параметры привязки, указанные для cl будут переведены в параметры link , и любые файлы, не обработанные cl будут переданы непосредственно в link . Поскольку это в основном простое руководство по компиляции с командной строкой Visual Studio, аргументы для link не будут описаны в настоящее время; если вам нужен список, см. здесь .</p>
<p>Обратите внимание, что аргументы для cl чувствительны к регистру, а аргументы для link — нет.</p>
<p>[Следует иметь в виду, что в некоторых из следующих примеров при указании абсолютных имен пути используется переменная «текущий каталог» оболочки Windows, %cd% . Для тех, кто не знаком с этой переменной, он расширяется до текущего рабочего каталога. Из командной строки это будет каталог, в котором вы были, когда вы запускаете cl , и указывается в командной строке по умолчанию (если ваша командная строка — C:\src> , например, то %cd% — C:\src\ ).]</p>
<p>Предполагая, что в текущей папке имеется один исходный файл с именем main.cpp , команда для компиляции и ссылки на неоптимизированный исполняемый файл (полезный для начальной разработки и отладки) является (используйте любой из следующих):</p>
<p>Предположим, что дополнительный файл-источник «niam.cpp» в том же каталоге использует следующее:</p>
<p>Вы также можете использовать подстановочные знаки, как и следовало ожидать:</p>
<p>Чтобы переименовать или переместить исполняемый файл, выполните одно из следующих действий:</p>
<p>Оба параметра /o и /Fe передают свой параметр (назовем его o-param ), чтобы link как /OUT:o-param , добавив соответствующее расширение (обычно .exe или .dll ) в «имя» o-param s по мере необходимости. Хотя оба /o и /Fe , насколько мне известно, идентичны по функциональности, последний предпочтительнее для Visual Studio. /o отмечен как устаревший и, как представляется, в основном предоставляется программистам, более знакомым с GCC или Clang.</p>
<p>Обратите внимание, что, хотя пространство между /o и указанной папкой и / или именем является необязательным, между /Fe и указанным папок и / или именем не <em>может</em> быть пробела.</p>
<p>Аналогично, для создания оптимизированного исполняемого файла (для использования в производстве) используйте:</p>
<p>Наконец, чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве на машине с указанной архитектурой), выберите соответствующую командную строку или параметр VCVARSALL для целевой платформы. link должна обнаружить желаемую платформу из объектных файлов; если нет, используйте параметр /MACHINE чтобы явно указать целевую платформу.</p>
<p>Любое из вышеперечисленного даст исполняемый файл с именем, указанным /o или /Fe , или если ни один из них не указан, с именем, идентичным первому источнику или объекту, указанному компилятору.</p>
<p>Чтобы скомпилировать файл (ы) без ссылки, используйте:</p>
<p>Это говорит cl для выхода без вызова link и создает объектный файл, который позже может быть связан с другими файлами для создания двоичного файла.</p>
<p>Существуют и другие важные параметры командной строки, которые было бы очень полезно для пользователей:</p>
<p>Для тех, кто более знаком с системами * nix и / или GCC / Clang, cl , link и другими инструментами командной строки Visual Studio, могут принимать параметры, указанные с помощью дефиса (например, -c ), вместо косой черты (например, /c ). Кроме того, Windows распознает либо косую черту, либо обратную косую черту как допустимый разделитель путей, поэтому можно использовать также пути в стиле nix. Это упрощает преобразование простых команд компилятора из g++ или clang++ в cl , или наоборот, с минимальными изменениями.</p>
<p>Конечно, при переносе командных строк, которые используют более сложные параметры g++ или clang++ , вам нужно искать эквивалентные команды в применимых документах компилятора и / или на ресурсных сайтах, но это облегчает работу с минимальным временем обучения новые компиляторы.</p>
<p>Если вам нужны специальные языковые функции для вашего кода, требуется определенная версия MSVC. Из Visual C ++ 2015 Update 3 можно выбрать версию стандарта для компиляции с помощью флага /std . Возможные значения: /std:c++14 и /std:c++latest ( /std:c++17 скоро появится).</p>
<p>Примечание. В более старых версиях этого компилятора были доступны специальные флаги функций, однако в основном это использовалось для предварительного просмотра новых функций.</p>
<h3>Компиляция с помощью Visual Studio (графический интерфейс) — Hello World</h3>
<ol>
<li>Загрузите и установите Visual Studio Community 2015</li>
<li>Открыть сообщество Visual Studio</li>
<li>Нажмите Файл -> Создать -> Проект <img decoding=

  • Нажмите Шаблоны -> Visual C ++ -> Консольное приложение Win32, а затем назовите проект MyFirstProgram . введите описание изображения здесь
  • Нажмите ОК.
  • Нажмите «Далее» в следующем окне. введите описание изображения здесь
  • Проверьте флажок « Empty project и нажмите «Готово»: введите описание изображения здесь
  • Щелкните правой кнопкой мыши папку Source Source затем -> Добавить -> Новый элемент: введите описание изображения здесь
  • Выберите файл C ++ и назовите файл main.cpp, затем нажмите «Добавить»: введите описание изображения здесь 10: Скопируйте и вставьте следующий код в новый файл main.cpp:
  • Вы должны выглядеть так: введите описание изображения здесь

    1. Нажмите «Отладка» -> «Старт без отладки» (или нажмите ctrl + F5):

    введите описание изображения здесь

    1. Готово. Вы должны получить следующий вывод консоли: введите описание изображения здесь

    Компиляция с 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++» и нажать «ОК» :

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

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *