Как скомпилировать с в exe файл через командную строку windows

If you've written or downloaded some C code on your Windows PC, you'll need to compile the code to turn it into an program you can run. This simple wikiHow tutorial will walk you through compiling and running a C program from the Windows...


Download Article


Download Article

If you’ve written or downloaded some C code on your Windows PC, you’ll need to compile the code to turn it into an program you can run. This simple wikiHow tutorial will walk you through compiling and running a C program from the Windows command prompt using MinGW, an easy-to-install version of the GCC compiler.

Steps

  1. Image titled Run C Program in Command Prompt Step 1

    1

    Install MinGW, a simple C compiler. If you haven’t already done so, you’ll need to install a C compiler on your PC to compile the C program. Compiling the C code will turn the code into an executable C program. MinGW is one of the easiest options to install for Windows:

    • Download MinGW from https://sourceforge.net/projects/mingw.
    • Double-click the downloaded file and follow the on-screen instructions to prepare the installation.
    • When you get to the MinGW Installation Manager window, you’ll see several packages in the upper-right panel.
    • Check the boxes next to «mingw32-base» and «mingw-gcc-g++.»
    • Click the Installation menu and select Apply Changes.
    • Click Apply.
  2. Image titled Run C Program in Command Prompt Step 2

    2

    Add the compiler’s path to your system environment variables. This step makes it easier to run the compiler from the command prompt, as you won’t have to enter the full path to the GCC program.

    • Press the Windows key and type environment. Click Edit the system environment variables in the search results.
    • Click the Environment Variables… button.
    • Select the «Path» option under «System variables» and click Edit…
    • Click New.
    • Type C:MinGWbin and click OK.
    • Click OK and OK again.

    Advertisement

  3. Image titled Run C Program in Command Prompt Step 3

    3

    Open a Command Prompt window as an administrator. To do this, press the Windows key, type cmd, right-click Command Prompt, and then select Run as Administrator.

    • Once the prompt window is open, double-check that the compiler installed properly (and that the environment variables are set) by running the command gcc -- version at the prompt.
    • If you already had a command prompt window open, close it and open another so the path you added
  4. Image titled Run C Program in Command Prompt Step 4

    4

    Use the cd command to go to the directory where your C program is saved. For example, if the program you want to compile is in C:MyPrograms, type cd C:MyPrograms and press Enter.

  5. Image titled Run C Program in Command Prompt Step 5

    5

    Run the gcc command to compile your C program. The syntax you’ll use is gcc filename.c -o filename.exe. This compiles the program and makes it executable.

    • Replace filename.c with the name of the file containing your C code, and filename.exe with the name you want to give the compiled program.
    • Make sure you give the compiled program a name that ends with .exe.
    • The -o flag specifies the output file.
  6. Image titled Run C Program in Command Prompt Step 6

    6

    Type the name of your new program and press Enter. For example, if you created a program called hello.exe, you can type hello or hello.exe. This runs your C program from the command prompt.

  7. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

About This Article

Article SummaryX

1. Install MinGW.
2. Add the compiler path to your system environment variables.
3. Open an elevated command prompt window.
4. Enter the directory of the C code.
5. Type gcc filename.c -o filename.exe and press Enter to compile.
6. Run the program by typing its name and pressing Enter.

Did this summary help you?

Thanks to all authors for creating a page that has been read 104,373 times.

Is this article up to date?


Download Article


Download Article

If you’ve written or downloaded some C code on your Windows PC, you’ll need to compile the code to turn it into an program you can run. This simple wikiHow tutorial will walk you through compiling and running a C program from the Windows command prompt using MinGW, an easy-to-install version of the GCC compiler.

Steps

  1. Image titled Run C Program in Command Prompt Step 1

    1

    Install MinGW, a simple C compiler. If you haven’t already done so, you’ll need to install a C compiler on your PC to compile the C program. Compiling the C code will turn the code into an executable C program. MinGW is one of the easiest options to install for Windows:

    • Download MinGW from https://sourceforge.net/projects/mingw.
    • Double-click the downloaded file and follow the on-screen instructions to prepare the installation.
    • When you get to the MinGW Installation Manager window, you’ll see several packages in the upper-right panel.
    • Check the boxes next to «mingw32-base» and «mingw-gcc-g++.»
    • Click the Installation menu and select Apply Changes.
    • Click Apply.
  2. Image titled Run C Program in Command Prompt Step 2

    2

    Add the compiler’s path to your system environment variables. This step makes it easier to run the compiler from the command prompt, as you won’t have to enter the full path to the GCC program.

    • Press the Windows key and type environment. Click Edit the system environment variables in the search results.
    • Click the Environment Variables… button.
    • Select the «Path» option under «System variables» and click Edit…
    • Click New.
    • Type C:MinGWbin and click OK.
    • Click OK and OK again.

    Advertisement

  3. Image titled Run C Program in Command Prompt Step 3

    3

    Open a Command Prompt window as an administrator. To do this, press the Windows key, type cmd, right-click Command Prompt, and then select Run as Administrator.

    • Once the prompt window is open, double-check that the compiler installed properly (and that the environment variables are set) by running the command gcc -- version at the prompt.
    • If you already had a command prompt window open, close it and open another so the path you added
  4. Image titled Run C Program in Command Prompt Step 4

    4

    Use the cd command to go to the directory where your C program is saved. For example, if the program you want to compile is in C:MyPrograms, type cd C:MyPrograms and press Enter.

  5. Image titled Run C Program in Command Prompt Step 5

    5

    Run the gcc command to compile your C program. The syntax you’ll use is gcc filename.c -o filename.exe. This compiles the program and makes it executable.

    • Replace filename.c with the name of the file containing your C code, and filename.exe with the name you want to give the compiled program.
    • Make sure you give the compiled program a name that ends with .exe.
    • The -o flag specifies the output file.
  6. Image titled Run C Program in Command Prompt Step 6

    6

    Type the name of your new program and press Enter. For example, if you created a program called hello.exe, you can type hello or hello.exe. This runs your C program from the command prompt.

  7. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

About This Article

Article SummaryX

1. Install MinGW.
2. Add the compiler path to your system environment variables.
3. Open an elevated command prompt window.
4. Enter the directory of the C code.
5. Type gcc filename.c -o filename.exe and press Enter to compile.
6. Run the program by typing its name and pressing Enter.

Did this summary help you?

Thanks to all authors for creating a page that has been read 104,373 times.

Is this article up to date?

Последнее обновление: 30.01.2023

Установка компилятора

Рассмотрим создание первой простейшей программы на C++ с помощью компилятора g++, который на сегодняшний день является одим из
наиболее популярных компиляторов для C++, доступен для разных платформ и который распространяется в рамках пакета компиляторов GCC. Более подробную информацию о g++ можно получить на официальном сайте проекта https://gcc.gnu.org/.

Набор компиляторов GCC распространяется в различных версиях. Для Windows одной из наиболее популярных версий является пакет средств для разработки от
некоммерческого проекта MSYS2. Следует отметить, что для MSYS2 требуется 64-битная версия Windows 7 и выше (то есть Vista, XP и более ранние версии не подходят)

Итак, загрузим программу установки MSYS2 с официального сайта MSYS2:

Установка MSYS для разработки под С++

После загрузки запустим программу установки:

Установка пакета mingw-w64 и msys2 на Windows

На первом шаге установки будет предложено установить каталог для установки. По умолчанию это каталог C:msys64:

Установка компиляторов C++ MSYS2 на Windows

Оставим каталог установки по умолчанию (при желании можно изменить). На следующем шаге устанавливаются настройки для ярлыка для меню Пуск, и затем собственно будет произведена установка.
После завершения установки нам отобразить финальное окно, в котором нажмем на кнопку Завершить

Установка компиляторов MSYS2 на Windows

После завершения установки запустится консольное приложение MSYS2.exe. Если по каким-то причинам оно не запустилось,
то в папке установки C:/msys64 надо найти файл usrt_64.exe:

компиляторы MSYS2.exe на Windows

Теперь нам надо установить собственно набор компиляторов GCC. Для этого введем в этом приложении следующую команду:

pacman -S mingw-w64-ucrt-x86_64-gcc

Для управления пакетами MSYS2 использует пакетный менеджер Packman. И данная команда говорит пакетному менелжеру packman установить пакет mingw-w64-ucrt-x86_64-gcc,
который представляет набор компиляторов GCC (название устанавливаемого пакета указывается после параметра -S).

Установка компиляторов MSYS2 на Windows

и после завершения установки мы можем приступать к программированию на языке C++. Если мы откроем каталог установки и зайдем в нем в папку C:msys64ucrt64bin,
то найдем там все необходимые файлы компиляторов:

Компилятор G++ на Windows

В частности, файл g++.exe как раз и будет представлять компилятор для языка С++.

Далее для упрощения запуска компилятора мы можем добавить путь к нему в Переменные среды. Для этого можно в окне поиска в Windows ввести «изменение переменных среды текущего пользователя»:

изменение переменных среды текущего пользователя в Windows

Нам откроется окно Переменныех среды:

Добавление GCC в переменные среды на Windows

И добавим путь к компилятору C:msys64ucrt64bin:

Определение пути к компилятору G++ в переменных среды на Windows

Чтобы убедиться, что набор компиляторов GCC успешно установлен, введем следующую команду:

В этом случае нам должна отобразиться версия компиляторов

Версия компиляторов MSYS2 GCC на Windows

Создание первой программы

Итак, компилятор установлен, и теперь мы можем написать первую программу. Для этого потребуется любой текстовый редактор для набора исходного кода.
Можно взять распространенный редактор Visual Studio Code или даже обычный встроенный Блокнот.

Итак, создадим на жестком диске С папку для исходных файлов. А в этой папке создадим новый текстовый файл, который переименуем в
hello.cpp. То есть по сути файлы исходного кода на С++ — это обычные текстовые файлы, которые, как правило, имеют расширение
cpp.

Первая программа на С++

В моем случае файл hello.cpp находится в папке C:cpp.

Теперь определим в файле hello.cpp простейший код, который будет выводить строку на консоль:

#include <iostream>        		// подключаем заголовочный файл iostream

int main()							// определяем функцию main
{									// начало функции
	std::cout << "Hello METANIT.COM!";	 // выводим строку на консоль
	return 0;						// выходим из функции
}									// конец функции

Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка

#include <iostream>

Данная строка представляет директиву препроцессора, которая позволяет подключить библиотеку iostream. Эта библиотека нужна для вывода строки на консоль.

Далее идет определение функции main. Функция main должна присутствовать в любой программе на С++, с нее
собственно и начинается выполнение приложения.

Функция main состоит из четырех элементов:

  • Тип возвращаемого значения. В данном случае это тип int. Этот тип указывает, что функция должна
    возвращать целое число.

  • Имя функции. В данном случае функция называется main.

  • Список параметров. После имени функции в скобках идет список параметров. Но в данном случае скобки пустые, то есть
    функция main не принимает параметров.

  • Тело функции. После списка параметров в фигурных скобках идет тело функции. Здесь и определяются собственно те
    действия, которые выполняет функция main.

    {
    	std::cout << "Hello METANIT.COM!";
    	return 0;
    }

В теле функции происходит вывод строки на консоль. Для обращения к консоли используется стандартный поток вывода std::cout.
С помощью оператора << в этот поток (в данном случае фактически на консоль) передается строка символов, которую надо вывести на консоль, то есть «Hello METANIT.COM!».

В конце осуществляем выход из функции с помощью оператора return. Так как функция должна возвращать целое число, то после return указывается число 0.
Ноль используется в качестве индикатора успешного завершения программы.

После каждой инструкции в языке C++ ставятся точка с запятой.

Каждая строка снабжена комментарием. Все, что написано после двойного слеша // представляет комментарий. Комментарий не учитывается при компиляции приложения, и
не является частью программного кода, а служат лишь для его описания. Комментарий позволяет понять, что делает программа.

Язык программирования С++ в Visual Studio Code

Теперь скомпилируем этот файл. Для этого откроем командную строку Windows и вначале с помощью команды cd перейдем к папке с исходным файлом:

Чтобы скомпилировать исходный код, необходимо компилятору gcc передать в качестве параметра файл hello.cpp:

Дополнительный необязательный параметр -o hello указывает, что скомпилированный файл будет называться hello.exe. Если не указать этот параметр, то файл будет называться по умолчанию — a.exe.

После выполнения этой команды будет скомпилирован исполняемый файл, который в Windows по умолчанию называется hello.exe. И мы можем обратиться к этому файлу, и в этом случае консоль выведет
строку «Hello METANIT.COM!», собственно как и прописано в коде.

Запуск компилятора G++ на Windows

Если вместо командной строки используется оболочка PowerShell, то для запуска файла надо прописать «./hello».

Стоит отметить, что мы можем совместить компиляцию и выполнение следующей командой:

g++ hello.cpp -o hello.exe & hello.exe

CSC.exe is the CSharp compiler included in the .NET Framework and can be used to compile from the command prompt. The output can be an executable «.exe», if you use «/target:exe», or a DLL; If you use /target:library, CSC.exe is found in the .NET Framework directory,

e.g. for .NET 3.5, c:windowsMicrosoft.NETFrameworkv3.5.

To run, first, open a command prompt, click «Start», then type cmd.exe.
You may then have to cd into the directory that holds your source files.

Run the C# compiler like this:

  c:windowsMicrosoft.NETFrameworkv3.5bincsc.exe 
            /t:exe /out:MyApplication.exe MyApplication.cs  ...

(all on one line)

If you have more than one source module to be compiled, you can put it on that same command line. If you have other assemblies to reference, use /r:AssemblyName.dll .

Ensure you have a static Main() method defined in one of your classes, to act as the «entry point».

To run the resulting EXE, type MyApplication, followed by <ENTER> using the command prompt.

This article on MSDN goes into more detail on the options for the command-line compiler. You can embed resources, set icons, sign assemblies — everything you could do within Visual Studio.

If you have Visual Studio installed, in the «Start menu»; under Visual Studio Tools, you can open a «Visual Studio command prompt», that will set up all required environment and path variables for command line compilation.

While it’s very handy to know of this, you should combine it with knowledge of some sort of build tool such as NAnt, MSBuild, FinalBuilder etc. These tools provide a complete build environment, not just the basic compiler.

On a Mac

On a Mac, syntax is similar, only C sharp Compiler is just named csc:

$ csc /target:exe /out:MyApplication.exe MyApplication.cs ...

Then to run it :

$ mono MyApplication.exe

Из этой статьи вы узнаете, как преобразовать код C ++ (CPP) в исполняемый EXE-файл. Если для написания кода вы используете коммерческую версию Microsoft Visual Studio, у нее есть простой в использовании встроенный компилятор. Если вы используете …

Метод 1 из 2:

Использование Microsoft Visual Studio

  1. Изображение 1 из Как скомпилировать файл CPP в EXE

    Откройте Visual Studio на своем ПК. Вы найдете его в меню «Пуск». Используйте этот метод, если вы используете полную коммерческую версию Visual Studio IDE.

    1. Если вы используете бесплатное приложение для программирования, такое как Visual Studio Code, которое не поставляется с компилятором, см. Использование MinGW вместо этого, чтобы узнать, как настроить MinGW, компилятор GCC для Windows.
  2. Изображение 2 из Как скомпилировать файл CPP в EXE

    Создайте новый проект. Если вы еще этого не сделали, щелкните меню «Файл», выберите «Создать» и затем выберите «Проект».[1] Появится диалоговое окно.

  3. Изображение 3: Как скомпилировать файл CPP в EXE

    Настройте свой проект: шаги немного отличаются в зависимости от версии, которую вы используете:

    1. Visual Studio 2019: выберите C ++ в меню «Язык», Windows в меню «Платформа», а затем Консоль в качестве «Тип проекта». Выберите «Консольное приложение», нажмите «Далее», введите имя проекта и нажмите «Создать».
    2. Visual Studio 2017: щелкните Рабочий стол Windows, а затем Консольное приложение Windows. Введите имя проекта и нажмите ОК.[2]
  4. Изображение 4 из Как скомпилировать файл CPP в EXE

    Откройте обозреватель решений, если он еще не открыт. Если вы еще не видите окно с таким именем, щелкните меню «Просмотр» и выберите «Обозреватель решений», чтобы отобразить его сейчас.

  5. Изображение 5 из Как скомпилировать файл CPP в EXE

    Добавьте ваш файл (ы) CPP в папку «Исходные файлы». Папка находится в обозревателе решений. Вы можете перетащить их туда из другого окна. Переименуйте основной файл CPP (тот, который содержит «int main ()») на имя проекта, который вы выбрали, если он еще не тот.

    1. Если у вас есть какие-либо файлы .H, добавьте их в каталог «Заголовочные файлы».
  6. Изображение 6 из Как скомпилировать файл CPP в EXE

    Щелкните меню «Сборка». Он находится в верхней части окна.[3]

  7. Изображение 7 из Как скомпилировать файл CPP в EXE

    В меню выберите «Собрать решение». Это компилирует вашу программу в формат EXE. Результаты вашей сборки появятся в окне «Вывод» в нижней части рабочей области.

    1. Чтобы протестировать свою программу в Visual Studio, щелкните меню «Отладка» и выберите «Пуск без отладки».
    2. Чтобы протестировать его из проводника, щелкните правой кнопкой мыши имя своего приложения в окне обозревателя решений, выберите «Открыть папку в проводнике», а затем дважды щелкните папку «Отладка» — здесь вы найдете свое приложение.
<p>Метод 2 из 2:</p> <h3 class="in-block">Использование MinGW</h3> <ol class="steps_list_2"><li id="step-id-17">  

Изображение 8 из Как скомпилировать файл CPP в EXE

  Загрузите Minimalist GNU для Windows (MinGW).  Если у вас еще нет компилятора, MinGW - отличная версия GCC для Windows, которая может компилировать код C ++.  Перейдите на сайт http://www.mingw.org в веб-браузере и следуйте этим инструкциям: <ol><li>Щелкните Загрузки на левой панели.</li> <li>Нажмите сине-белую кнопку с логотипом Windows под вашей операционной системой.</li> <li>Если файл не загружается сразу, нажмите «Сохранить», чтобы загрузить его сейчас.</li> </ol> </li> <li id="step-id-18">  

Изображение 9 из Как скомпилировать файл CPP в EXE

  Запустите скачанный установочный файл.  Для этого дважды щелкните загруженный файл, нажмите «Установить», а затем нажмите «Продолжить».  Каталог установки по умолчанию - C: MinGW - оставьте его таким образом, чтобы упростить задачу, поскольку вам нужно будет ввести его позже.  Приложение будет установлено.  Когда установка будет завершена, нажмите «Продолжить», чтобы запустить ее. <ol><li>Если вы устанавливаете MinGW в другую папку, обратите внимание, в какой это папке, чтобы вы могли правильно установить переменные среды.</li> </ol> </li> <li id="step-id-19">  

Изображение 10 из Как скомпилировать файл CPP в EXE

  Установите файлы GCC в MinGW.  Остальные шаги установки загрузят фактический компилятор GCC и связанные файлы: <ol><li>В левом столбце выберите Basic Setup.</li> <li>Выберите все параметры в правом столбце и отметьте их все для установки в соответствии с запросом.</li> <li>Щелкните меню «Установка» и выберите «Применить изменения».</li> <li>Нажмите Применить, чтобы начать загрузку.  Когда загрузка будет завершена, нажмите «Закрыть».</li> </ol> </li> <li id="step-id-110">  

Изображение 11 из Как скомпилировать файл CPP в EXE

  <p>Щелкните правой кнопкой мыши меню «Пуск» и выберите «Система».  Откроется окно настроек с экраном «О программе».</p> </li> <li id="step-id-111">  

Изображение 12 из Как скомпилировать файл CPP в EXE

  <p>Прокрутите вниз и щелкните Сведения о системе на правой панели.  Он находится в нижней части панели в разделе «Связанные настройки».</p> </li> <li id="step-id-112">  

Изображение 13 из Как скомпилировать файл CPP в EXE

  <p>Щелкните Дополнительные параметры системы на левой панели.  Откроется диалоговое окно «Свойства системы».</p> </li> <li id="step-id-113">  

Изображение 14 из Как скомпилировать файл CPP в EXE

  <p>Нажмите кнопку «Переменные среды».  Он находится в нижней части вкладки «Дополнительно», которая открывается по умолчанию.</p> </li> <li id="step-id-114">  

Изображение 15 из Как скомпилировать файл CPP в EXE

  Добавьте двоичную переменную пути MinGW.  Это позволяет легко запускать компилятор из любого места на вашем ПК.  Вот как:[4]<ol><li>Дважды щелкните Путь в разделе «Системные переменные» в нижнем разделе.</li> <li>Нажмите кнопку «Создать» в правом верхнем углу.</li> <li>Тип <em>C: MinGWbin</em> в пустое поле и нажмите ОК.</li> <li>Еще раз нажмите ОК и закройте все открытые окна.</li> </ol> </li> <li id="step-id-115">  

Изображение 16 из Как скомпилировать файл CPP в EXE

  <p>Щелкните правой кнопкой мыши кнопку «Пуск» и выберите «Проводник».  Откроется ваш файловый браузер.</p> </li> <li id="step-id-116">  

Изображение 17 из Как скомпилировать файл CPP в EXE

  <p>Перейдите в папку, содержащую ваш файл (ы) CPP.  Расположение будет отличаться.  Если вы используете Visual Studio Code (бесплатный редактор кода от Microsoft), вы можете быстро найти местоположение в приложении, щелкнув правой кнопкой мыши файл .cpp на левой панели и выбрав «Показать в проводнике».  В других редакторах также может быть опция «Открыть в проводнике».</p> </li> <li id="step-id-117">  

Изображение 18 из Как скомпилировать файл CPP в EXE

  <p>Удерживая нажатой клавишу ⇧ Shift, щелкните пустую область в папке.  Меню развернется.</p> </li> <li id="step-id-118">  

Изображение 19 из Как скомпилировать файл CPP в EXE

  <p>Выберите здесь Открыть командное окно.  Если вы используете Windows PowerShell, вместо этого вы увидите «Открыть окно PowerShell здесь».  Это открывает командную строку в той же папке, что и ваш код CPP.</p> </li> <li id="step-id-119" class="final_li">  

Изображение 20 из Как скомпилировать файл CPP в EXE

  <p>Запустите команду, чтобы скомпилировать вашу программу.  Введите g ++ yourprogram.cpp (замените это имя именем вашего фактического файла CPP) и нажмите ↵ Enter, чтобы скомпилировать файл CPP в EXE.  Если в вашем коде C ++ нет ошибок, в текущей папке появится новый файл, заканчивающийся на «EXE».</p> </li> </ol>  

Мика Сото Мика Сото

Обновление 05 марта 2020 г.

Вступление

Программы, написанные на C ++, должны быть скомпилированы до их запуска. В зависимости от вашей операционной системы доступно большое количество компиляторов.

замечания

Компиляция с помощью GCC

Предполагая, что один исходный файл с именем main.cpp , команда для компиляции и ссылки на не оптимизированный исполняемый файл выглядит следующим образом (компиляция без оптимизации полезна для начальной разработки и отладки, хотя -Og официально рекомендуется для более новых версий GCC).

g++ -o app -Wall main.cpp -O0

Чтобы создать оптимизированный исполняемый файл для использования в производстве, используйте один из опций -O (см .: -O1 , -O2 , -O3 , -Os , -Ofast ):

g++ -o app -Wall -O2 main.cpp

Если опция -O опущена, -O0, что означает отсутствие оптимизаций, используется по умолчанию (указание -O без номера разрешается на -O1).

Альтернативно, используйте флаги оптимизации из групп O (или более экспериментальных оптимизаций) напрямую. В следующем примере построена оптимизация -O2 плюс один флаг с уровня оптимизации -O3 :

g++ -o app -Wall -O2 -ftree-partial-pre main.cpp

Чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве с той же архитектурой), используйте:

g++ -o app -Wall -O2 -march=native main.cpp

Любой из вышеперечисленных файлов создаст двоичный файл, который можно запустить с .app.exe в Windows и ./app в Linux, Mac OS и т. Д.

Флаг -o также может быть пропущен. В этом случае GCC создаст исполняемый файл a.exe по умолчанию a.exe Windows и a.out в Unix-подобных системах. Чтобы скомпилировать файл без его связывания, используйте параметр -c :

g++ -o file.o -Wall -c file.cpp

Это создает объектный файл с именем file.o который впоследствии может быть связан с другими файлами для создания двоичного файла:

g++ -o app file.o otherfile.o

Подробнее о вариантах оптимизации можно узнать на gcc.gnu.org . Особо следует отметить -Og (оптимизация с упором на опыт отладки — рекомендуется для стандартного цикла редактирования-компиляции-отладки) и -Ofast (все оптимизации, включая те, которые не соответствуют строгому соблюдению стандартов).

Флаг -Wall позволяет предупреждать многие распространенные ошибки и всегда должен использоваться. Для улучшения качества кода часто рекомендуется использовать -Wextra и другие предупреждающие флаги, которые автоматически не активируются -Wall и -Wextra .

Если код ожидает определенный стандарт C ++, укажите, какой стандарт использовать, включая флаг -std= . Поддерживаемые значения соответствуют году завершения для каждой версии стандарта ISO C ++. Начиная с GCC 6.1.0, допустимыми значениями для std= flag являются c++98 / c++03 , c++11 , c++14 и c++17 / c++1z . Значения, разделенные косой чертой, эквивалентны.

g++ -std=c++11 <file>

GCC включает некоторые расширения, специфичные для компилятора, которые отключены, когда они конфликтуют со стандартом, заданным флагом -std= . Для компиляции с включенными всеми расширениями может использоваться значение gnu++XX , где XX — любой из лет, используемых значениями c++ перечисленными выше.

Стандарт по умолчанию будет использоваться, если ни один не указан. Для версий GCC до 6.1.0 по умолчанию используется значение -std=gnu++03 ; в GCC 6.1.0 и выше по умолчанию используется -std=gnu++14 .

Обратите внимание, что из-за ошибок в GCC флаг -pthread должен присутствовать при компиляции и связывании для GCC для поддержки стандартных функций потоковой -pthread C ++, представленных с C ++ 11, таких как std::thread и std::wait_for . Опущение при использовании функций потоковой передачи может не приводить к появлению предупреждений, но недействительных результатов на некоторых платформах.

Связывание с библиотеками:

Используйте опцию -l для передачи имени библиотеки:

g++ main.cpp -lpcre2-8
#pcre2-8 is the PCRE2 library for 8bit code units (UTF-8)

Если библиотека не находится в стандартном пути библиотеки, добавьте путь с параметром -L :

g++ main.cpp -L/my/custom/path/ -lmylib

Несколько библиотек могут быть связаны между собой:

g++ main.cpp -lmylib1 -lmylib2 -lmylib3

Если одна библиотека зависит от другой, поместите зависимую библиотеку перед независимой библиотекой:

g++ main.cpp -lchild-lib -lbase-lib

Или дайте компоновщику определить само упорядочение через --start-group и --end-group (обратите внимание: это имеет значительную производительность):

g++ main.cpp -Wl,--start-group -lbase-lib -lchild-lib -Wl,--end-group

Компиляция с помощью Visual C ++ (командной строки)

Для программистов, поступающих из GCC или Clang в Visual Studio, или программистов, более удобных с командной строкой в ​​целом, вы можете использовать компилятор Visual C ++ из командной строки, а также из среды IDE.

Если вы хотите скомпилировать свой код из командной строки в 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 xVC , где x — номер версии (например, 10.0 для 2010 или 14.0 для 2015) и запуск командного файла VCVARSALL с помощью параметр командной строки, указанный здесь .

Обратите внимание, что в отличие от GCC, Visual Studio не предоставляет интерфейс для компоновщика ( link.exe ) через компилятор ( cl.exe ), но вместо этого предоставляет компоновщик как отдельную программу, которую компилятор вызывает при выходе. cl.exe и link.exe могут использоваться отдельно с разными файлами и параметрами, иначе cl может передаваться файлы и параметры для link если обе задачи выполняются вместе. Любые параметры привязки, указанные для cl будут переведены в параметры link , и любые файлы, не обработанные cl будут переданы непосредственно в link . Поскольку это в основном простое руководство по компиляции с командной строкой Visual Studio, аргументы для link не будут описаны в настоящее время; если вам нужен список, см. здесь .

Обратите внимание, что аргументы для cl чувствительны к регистру, а аргументы для link — нет.

[Следует иметь в виду, что в некоторых из следующих примеров при указании абсолютных имен пути используется переменная «текущий каталог» оболочки Windows, %cd% . Для тех, кто не знаком с этой переменной, он расширяется до текущего рабочего каталога. Из командной строки это будет каталог, в котором вы были, когда вы запускаете cl , и указывается в командной строке по умолчанию (если ваша командная строка — C:src> , например, то %cd%C:src ).]


Предполагая, что в текущей папке имеется один исходный файл с именем main.cpp , команда для компиляции и ссылки на неоптимизированный исполняемый файл (полезный для начальной разработки и отладки) является (используйте любой из следующих):

cl main.cpp
// Generates object file "main.obj".
// Performs linking with "main.obj".
// Generates executable "main.exe".

cl /Od main.cpp
// Same as above.
// "/Od" is the "Optimisation: disabled" option, and is the default when no /O is specified.

Предположим, что дополнительный файл-источник «niam.cpp» в том же каталоге использует следующее:

cl main.cpp niam.cpp
// Generates object files "main.obj" and "niam.obj".
// Performs linking with "main.obj" and "niam.obj".
// Generates executable "main.exe".

Вы также можете использовать подстановочные знаки, как и следовало ожидать:

cl main.cpp src*.cpp
// Generates object file "main.obj", plus one object file for each ".cpp" file in folder
//  "%cd%src".
// Performs linking with "main.obj", and every additional object file generated.
// All object files will be in the current folder.
// Generates executable "main.exe".

Чтобы переименовать или переместить исполняемый файл, выполните одно из следующих действий:

cl /o name main.cpp
// Generates executable named "name.exe".

cl /o folder main.cpp
// Generates executable named "main.exe", in folder "%cd%folder".

cl /o foldername main.cpp
// Generates executable named "name.exe", in folder "%cd%folder".

cl /Fename main.cpp
// Same as "/o name".

cl /Fefolder main.cpp
// Same as "/o folder".

cl /Fefoldername main.cpp
// Same as "/o foldername".

Оба параметра /o и /Fe передают свой параметр (назовем его o-param ), чтобы link как /OUT:o-param , добавив соответствующее расширение (обычно .exe или .dll ) в «имя» o-param s по мере необходимости. Хотя оба /o и /Fe , насколько мне известно, идентичны по функциональности, последний предпочтительнее для Visual Studio. /o отмечен как устаревший и, как представляется, в основном предоставляется программистам, более знакомым с GCC или Clang.

Обратите внимание, что, хотя пространство между /o и указанной папкой и / или именем является необязательным, между /Fe и указанным папок и / или именем не может быть пробела.


Аналогично, для создания оптимизированного исполняемого файла (для использования в производстве) используйте:

cl /O1 main.cpp
// Optimise for executable size.  Produces small programs, at the possible expense of slower
//  execution.

cl /O2 main.cpp
// Optimise for execution speed.  Produces fast programs, at the possible expense of larger
//  file size.

cl /GL main.cpp other.cpp
// Generates special object files used for whole-program optimisation, which allows CL to
//  take every module (translation unit) into consideration during optimisation.
// Passes the option "/LTCG" (Link-Time Code Generation) to LINK, telling it to call CL during
//  the linking phase to perform additional optimisations.  If linking is not performed at this
//  time, the generated object files should be linked with "/LTCG".
// Can be used with other CL optimisation options.

Наконец, чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве на машине с указанной архитектурой), выберите соответствующую командную строку или параметр VCVARSALL для целевой платформы. link должна обнаружить желаемую платформу из объектных файлов; если нет, используйте параметр /MACHINE чтобы явно указать целевую платформу.

// If compiling for x64, and LINK doesn't automatically detect target platform:
cl main.cpp /link /machine:X64

Любое из вышеперечисленного даст исполняемый файл с именем, указанным /o или /Fe , или если ни один из них не указан, с именем, идентичным первому источнику или объекту, указанному компилятору.

cl a.cpp b.cpp c.cpp
// Generates "a.exe".

cl d.obj a.cpp q.cpp
// Generates "d.exe".

cl y.lib n.cpp o.obj
// Generates "n.exe".

cl /o yo zp.obj pz.cpp
// Generates "yo.exe".

Чтобы скомпилировать файл (ы) без ссылки, используйте:

cl /c main.cpp
// Generates object file "main.obj".

Это говорит cl для выхода без вызова link и создает объектный файл, который позже может быть связан с другими файлами для создания двоичного файла.

cl main.obj niam.cpp
// Generates object file "niam.obj".
// Performs linking with "main.obj" and "niam.obj".
// Generates executable "main.exe".

link main.obj niam.obj
// Performs linking with "main.obj" and "niam.obj".
// Generates executable "main.exe".

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

cl /EHsc main.cpp
// "/EHsc" specifies that only standard C++ ("synchronous") exceptions will be caught,
//  and `extern "C"` functions will not throw exceptions.
// This is recommended when writing portable, platform-independent code.

cl /clr main.cpp
// "/clr" specifies that the code should be compiled to use the common language runtime,
//  the .NET Framework's virtual machine.
// Enables the use of Microsoft's C++/CLI language in addition to standard ("native") C++,
//  and creates an executable that requires .NET to run.

cl /Za main.cpp
// "/Za" specifies that Microsoft extensions should be disabled, and code should be
//  compiled strictly according to ISO C++ specifications.
// This is recommended for guaranteeing portability.

cl /Zi main.cpp
// "/Zi" generates a program database (PDB) file for use when debugging a program, without
//  affecting optimisation specifications, and passes the option "/DEBUG" to LINK.

cl /LD dll.cpp
// "/LD" tells CL to configure LINK to generate a DLL instead of an executable.
// LINK will output a DLL, in addition to an LIB and EXP file for use when linking.
// To use the DLL in other programs, pass its associated LIB to CL or LINK when compiling those
//  programs.

cl main.cpp /link /LINKER_OPTION
// "/link" passes everything following it directly to LINK, without parsing it in any way.
// Replace "/LINKER_OPTION" with any desired LINK option(s).

Для тех, кто более знаком с системами * nix и / или GCC / Clang, cl , link и другими инструментами командной строки Visual Studio, могут принимать параметры, указанные с помощью дефиса (например, -c ), вместо косой черты (например, /c ). Кроме того, Windows распознает либо косую черту, либо обратную косую черту как допустимый разделитель путей, поэтому можно использовать также пути в стиле nix. Это упрощает преобразование простых команд компилятора из g++ или clang++ в cl , или наоборот, с минимальными изменениями.

g++ -o app src/main.cpp
cl  -o app src/main.cpp

Конечно, при переносе командных строк, которые используют более сложные параметры g++ или clang++ , вам нужно искать эквивалентные команды в применимых документах компилятора и / или на ресурсных сайтах, но это облегчает работу с минимальным временем обучения новые компиляторы.

Если вам нужны специальные языковые функции для вашего кода, требуется определенная версия MSVC. Из Visual C ++ 2015 Update 3 можно выбрать версию стандарта для компиляции с помощью флага /std . Возможные значения: /std:c++14 и /std:c++latest ( /std:c++17 скоро появится).

Примечание. В более старых версиях этого компилятора были доступны специальные флаги функций, однако в основном это использовалось для предварительного просмотра новых функций.

Компиляция с помощью Visual Studio (графический интерфейс) — Hello World

  1. Загрузите и установите Visual Studio Community 2015
  2. Открыть сообщество Visual Studio
  3. Нажмите Файл -> Создать -> Проект введите описание изображения здесь
  4. Нажмите Шаблоны -> Visual C ++ -> Консольное приложение Win32, а затем назовите проект MyFirstProgram . введите описание изображения здесь
  5. Нажмите ОК.
  6. Нажмите «Далее» в следующем окне. введите описание изображения здесь
  7. Проверьте флажок « Empty project и нажмите «Готово»: введите описание изображения здесь
  8. Щелкните правой кнопкой мыши папку Source Source затем -> Добавить -> Новый элемент: введите описание изображения здесь
  9. Выберите файл C ++ и назовите файл main.cpp, затем нажмите «Добавить»: введите описание изображения здесь 10: Скопируйте и вставьте следующий код в новый файл main.cpp:
#include <iostream>

int main()
{
    std::cout << "Hello World!n";
    return 0;
}

Вы должны выглядеть так: введите описание изображения здесь

  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 следующим образом:

mkdir build
cd build
CC=clang CXX=clang++ cmake ..
cmake --build .

См. Также введение в Cmake .

Компиляторы онлайн

Различные веб-сайты предоставляют онлайн-доступ к компиляторам 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 ++ с именем prog.cpp, и вы выполняете команду компиляции,

   g++ -Wall -ansi -o prog prog.cpp

Существует четыре основных этапа, связанных с созданием исполняемого файла из исходного файла.

  1. Препроцессор C ++ принимает файл исходного кода C ++ и обрабатывает заголовки (#include), макросы (#define) и другие директивы препроцессора.

  2. Расширенный исходный код C ++, созданный препроцессором C ++, скомпилирован на язык ассемблера для платформы.

  3. Код ассемблера, сгенерированный компилятором, собран в код объекта для платформы.

  4. Файл объектного кода, созданный ассемблером, связан вместе
    с объектными кодами для любых библиотечных функций, используемых для создания библиотеки или исполняемого файла.

предварительная обработка

Препроцессор обрабатывает директивы препроцессора, такие как #include и #define. Это агностик синтаксиса C ++, поэтому его следует использовать с осторожностью.

Он работает в одном исходном файле C ++ за раз, заменяя директивы #include содержимым соответствующих файлов (обычно это просто объявления), выполняет замену макросов (#define) и выбирает разные части текста в зависимости от #if, #ifdef и #ifndef.

Препроцессор работает над потоком токенов предварительной обработки. Макрозамена определяется как замена токенов другими токенами (оператор ## позволяет слить два токена, когда это имеет смысл).

После этого препроцессор создает один вывод, который представляет собой поток токенов, полученный в результате описанных выше преобразований. Он также добавляет некоторые специальные маркеры, которые сообщают компилятору, откуда появилась каждая строка, чтобы он мог использовать их для создания разумных сообщений об ошибках.

На этом этапе могут быть сделаны некоторые ошибки с умным использованием директив #if и #error.

Используя ниже флаг компилятора, мы можем остановить процесс на этапе предварительной обработки.

g++ -E prog.cpp

компиляция

Шаг компиляции выполняется на каждом выходе препроцессора. Компилятор анализирует чистый исходный код C ++ (теперь без каких-либо предпроцессорных директив) и преобразует его в код сборки. Затем вызывает базовый сервер (ассемблер в toolchain), который собирает этот код в машинный код, производящий фактический двоичный файл в некотором формате (ELF, COFF, a.out, …). Этот объектный файл содержит скомпилированный код (в двоичной форме) символов, определенных на входе. Символы в объектных файлах называются по имени.

Файлы объектов могут ссылаться на символы, которые не определены. Это тот случай, когда вы используете декларацию и не предоставляете определение для нее. Компилятор не возражает против этого и будет с удовольствием создавать объектный файл до тех пор, пока исходный код будет правильно сформирован.

Компиляторы обычно позволяют прекратить компиляцию на этом этапе. Это очень полезно, потому что с ним вы можете скомпилировать каждый исходный код отдельно. Преимущество этого заключается в том, что вам не нужно перекомпилировать все, если вы меняете только один файл.

Созданные объектные файлы могут быть помещены в специальные архивы, называемые статическими библиотеками, для более легкого повторного использования позже.

На этом этапе сообщается о «регулярных» ошибках компилятора, таких как синтаксические ошибки или ошибки с ошибками при перегрузке.

Чтобы остановить процесс после этапа компиляции, мы можем использовать параметр -S:

g++ -Wall -ansi -S prog.cpp

монтаж

Ассемблер создает объектный код. В системе UNIX вы можете видеть файлы с суффиксом .o (.OBJ на MSDOS), чтобы указать файлы объектных кодов. На этом этапе ассемблер преобразует эти объектные файлы из кода сборки в инструкции машинного уровня, а созданный файл является перемещаемым объектным кодом. Следовательно, на этапе компиляции создается перемещаемая объектная программа, и эта программа может использоваться в разных местах без повторной компиляции.

Чтобы остановить процесс после шага сборки, вы можете использовать опцию -c:

g++ -Wall -ansi -c prog.cpp

соединение

Линкером является то, что дает окончательный результат компиляции из файлов объектов, созданных ассемблером. Этот вывод может быть либо общей (или динамической) библиотекой (и, хотя имя похоже, они не имеют много общего со статическими библиотеками, упомянутыми ранее), либо исполняемый файл.

Он связывает все объектные файлы, заменяя ссылки на неопределенные символы правильными адресами. Каждый из этих символов может быть определен в других объектных файлах или в библиотеках. Если они определены в библиотеках, отличных от стандартной библиотеки, вам нужно сообщить об этом компоновщику.

На этом этапе наиболее распространенными ошибками являются отсутствующие определения или дублирующие определения. Первое означает, что либо определения не существуют (т.е. они не написаны), либо что объектные файлы или библиотеки, в которых они находятся, не были предоставлены компоновщику. Последнее очевидно: один и тот же символ был определен в двух разных объектных файлах или библиотеках.

Компиляция с помощью кода :: Блоки (графический интерфейс)

  1. Загрузите и установите Code :: Blocks здесь . Если вы находитесь в Windows, будьте осторожны, чтобы выбрать файл, для которого имя содержит mingw , другие файлы не устанавливают компилятор.

  2. Откройте код :: Блоки и нажмите «Создать новый проект»:

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

  3. Выберите «Консольное приложение» и нажмите «Перейти»:

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

  4. Нажмите «Далее», выберите «C ++», нажмите «Далее», выберите имя для своего проекта и выберите папку для ее сохранения, нажмите «Далее» и затем нажмите «Готово».

  5. Теперь вы можете редактировать и компилировать свой код. Код по умолчанию, который печатает «Hello world!» в консоли уже есть. Чтобы скомпилировать и / или запустить вашу программу, нажмите одну из трех кнопок компиляции / запуска на панели инструментов:

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

    Для компиляции без запуска нажмите строить , для запуска без компиляции снова нажмите Бежать и компилировать, а затем запускать, нажмите Сборка и запуск ,

    Компиляция и запуск по умолчанию «Hello world!» код дает следующий результат:

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

Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей:

  • Как скомпилировать программу с github для windows
  • Как скомпилировать программу для windows в linux
  • Как скомпилировать windows forms в exe
  • Как скомпилировать python в exe файл windows
  • Как склеить несколько видео в одно windows 10

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные