Поиск…


Вступление

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

замечания

Большинство операционных систем поставляются без компилятора, и их необходимо установить позже. Некоторые общие варианты компиляторов:

Пожалуйста, обратитесь к соответствующему руководству по компиляции, о том, как скомпилировать программу на 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 x\VC , где 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 folder\name 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 /Fefolder\name main.cpp
// Same as "/o folder\name".

Оба параметра /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 ++ и т. Д., В машинный код, который прямо понимается Центральным процессором. Например, если у вас есть исходный код 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!» код дает следующий результат:

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow