новая ошибка c ++ с файлом - PullRequest
0 голосов
/ 07 мая 2018

Я на 100% новичок в C ++, так что терпите меня:)

Я получаю ошибку с этим файлом и не знаю почему. любая помощь приветствуется.

#include <iostream>

using namespace std;

int main()
{
    cout << "hi" << endl;
    return 0;
}

------------ Сборка: отладка в 1600 (компилятор: GNU GCC Compiler) -------------

g++  -o bin/Debug/1600 obj/Debug/main.o obj/Debug/src/test.o obj/Debug/test03.o   
duplicate symbol _main in:
    obj/Debug/main.o
    obj/Debug/test03.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Из исходных файлов создаются символы. main в файле .cpp становится _main в качестве символа. Во время связывания может быть только одна функция main, поэтому ожидается и разрешен только один символ _main.


У вас есть три объектных файла, которые были созданы:

  • obj / Debug / main.o, который содержит main
  • obj / Debug / src / test.o
  • obj / Debug / test03.o, который также содержит main

Возможно, потому что у вас есть файл .cpp для каждого из них, и командная строка или IDE, которую вы используете, попросили их все скомпилировать.

duplicate symbol _main

Приведенный выше текст говорит вам, что компоновщик (пытаясь разобраться во всех файлах скомпилированных объектов (.o)) нашел более одного main.


Таким образом, решение состоит в том, чтобы просмотреть ваши настройки IDE и удалить другие файлы (или, по крайней мере, удалить main из других файлов), потому что вы заинтересованы только в компиляции одного исходного файла.

0 голосов
/ 07 мая 2018

Трудно сказать, что вы бежите от вопроса.

Вот как можно построить простую программу на C ++, используя gcc

В my_program.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "hi" << endl;
    return 0;
}

Для компиляции в объектные файлы введите

g++ -c my_program.cpp

Для ссылки (обычно у вас есть больше файлов здесь)

g++ -o my_program my_program.o

Итак, это не очень весело, поэтому большинство людей используют такие системы сборки, как make, cmake, msbuild или что-либо еще, что использует CLion IDE.

...