2013-04-26 2 views
5

Я столкнулся с this, пытаясь получить ответ. Но похоже, что у плаката было несколько файлов, и они не связывались, и, следовательно, ошибка.`undefined ссылка на` main` в классе Cpp без main()

Но почему я получаю эту ошибку при использовании одного файла?

g++ myClass.cpp 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 

И почему main необходимо здесь во время компиляции (откуда это найти упоминание о главном в моем коде)? main является отправной точкой для выполнения кода, но почему компилятор предполагает, что мне нужен main. Я могу определить его в каком-то другом файле и использовать gcc -o, чтобы сделать исполняемый файл?

Возможно, мне недостает кода в коде, который вызывает ошибку?

#include<iostream> 
class myClass 
{ 

public: 
myClass() 
{ 
    std::cout<<"Constructor"; 
} 

~myClass() 
{ 
    std::cout<<"Destructor";  
} 

}; 

ответ

5

main не требуется для компиляции исходного файла. Необходимо связать программу с исполняемым файлом [1], потому что программа должна начинаться где-то.

Вы должны сказать компилятору, что «это не вся моя программа, просто скомпилировать, но не связывать», используя «-c» вариант, так

g++ -c myClass.cpp 

, который будет производить a myClass.o файл, который вы затем можете использовать позже, например

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib 

(Очевидно, что замещающие имена с тем, что у вас есть в вашем проекте)

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

7

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

g++ -c myClass.cpp 

В то время как Вы в этом, я полагаю, добавив предупредительные флаги -Wall -Wextra по крайней мере.

1

Вы строите источник в качестве приложения. Добавить -c вариант для создания только объектного файла:

g++ -c myClass.cpp 
1

Скомпилировать только ?! использовать -c вариант

g++ -c file.cpp 

иначе проект нуждается в main.

1

Для компиляции и использования компилятором необходимо использовать флаг -c и генерировать объектный файл. Вы сообщаете компилятору сделать исполняемый файл.

Смежные вопросы