Ошибка компиляции: Undefined символы: "_main", на которые ссылаются: start at crt1.10.5.o
У меня есть следующий код:
#include <iostream>
using namespace std;
class testing{
int test() const;
int test1(const testing& test2);
};
int testing::test() const{
return 1;
}
int testing::test1(const testing& test2){
test2.test();
return 1;
}
после компиляции он вызывает следующую ошибку:
Undefined symbols:
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Почему он жалуется на главную? Не могу я объявить main в другом файле и включить этот?
Спасибо большое!
Ответы
Ответ 1
Вы уже пытались связать его:
g++ file.cpp
Это не только скомпилирует его, но и попытается создать исполняемый файл. Затем компоновщик не может найти основную функцию, в которой он нуждается. Ну, сделайте это так:
g++ -c file.cpp
g++ -c hasmain.cpp
Это создаст два файла file.o и hasmain.o, оба только скомпилированные до сих пор. Теперь вы можете связать их вместе с g++:
g++ -omy_program hasmain.o file.o
Будет автоматически выяснено, что эти файлы уже скомпилированы и вызывают на них компоновщик, чтобы создать файл "my_program", который является вашим исполняемым файлом.
Ответ 2
Если вы объявите основную функцию в другом файле, вы должны скомпилировать эти два файла отдельно, а затем связать их с одним исполняемым файлом.
Если вы не включите все содержимое файла из файла с главной функцией, это тоже будет работать, хотя и немного странно. Но, если вы это сделаете, вам нужно убедиться, что вы скомпилируете файл с функцией main().