Почему не компилируется код C++ на Mac OS?

Добрый день.

Начал обучаться программированию C++ на своем MacBook Air, OS X 10.9.3, но это просто сплошное мучение. MacBook ничего не хочет компилироваться, а я в силу своего небольшого опыта не могу понять, в чем причина. Гугл тоже отказывается помогать.

Даже если я беру код из примеров в книге или на сайтах - не хочет компилировать.

Например, изучал составные операторы присваивания c++, скопировал из примера:
#include <iostream>
using namespace std;
int main() {
    int a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555;
    
    a += b;      // a is 9
    b %= a;      // b is 6
    c >>= 1;      // c is 5
    d |= e;      // Bitwise--d is 0xFFFF
    
    cout  << "a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555" << endl
    << "a += b yields " << a << endl
    << "b %= a yields " << b << endl
    << "c >>= 1 yields " << c << endl
    << "d |= e yields " << hex << d << endl;
}


Жму скомпилировать, и Xcode тут же выдает мне ошибку -
0df423893f2040d7aebbf126c37465b0.png

Текст ошибки:
duplicate symbol _main in:
    /Users/Egor/Library/Developer/Xcode/DerivedData/Обучение-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Обучение.build/Debug/Обучение.build/Objects-normal/x86_64/main.o
    /Users/Egor/Library/Developer/Xcode/DerivedData/Обучение-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Обучение.build/Debug/Обучение.build/Objects-normal/x86_64/Sostavnie.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


Не кидайтесь тапками в чайника :)
  • Вопрос задан
  • 8027 просмотров
Решения вопроса 1
EXL
@EXL
Энтузиаст
Вы видимо создали один проект и помещаете в него все примеры. Линковщик, видя, что функция main() продублирована несколько раз, выдает вам закономерную ошибку. Типичная ошибка новичка. Вам необходимо перейти на концепцию: для каждого примера - отдельный проект.

И еще посоветую не использовать кириллические символы в путях к директориям с кодом:
/Users/Egor/Library/Developer/Xcode/DerivedData/Обучение-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Обучение.build/Debug/Обучение.build/Objects-normal/x86_64/main.o


Лучше заменить на
/Users/Egor/Library/Developer/Xcode/DerivedData/Training-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Training.build/Debug/Training.build/Objects-normal/x86_64/main.o</build>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
В процессе линковки у вас присутствуют два определения функции main (могут быть в разных файлах), посмотрите на настройки линковки и компиляции. Что-то лишнее подхватывается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы