Проблема компиляции в стандартных библиотеках x86_64 - PullRequest
1 голос
/ 26 мая 2010

У меня проблемы с компиляцией написанной мною программы. У меня есть два разных файла с одинаковыми включениями, но только один генерирует следующую ошибку при компиляции с g ++

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status

Файлы, которые я включаю в свой заголовок, следующие:

#include <google/sparse_hash_map>
using google::sparse_hash_map;

#include <ext/hash_map>
#include <math.h>
#include <iostream>
#include <queue>
#include <vector>
#include <stack>

using std::priority_queue;
using std::stack;
using std::vector;

using __gnu_cxx::hash_map;
using __gnu_cxx::hash; 

using namespace std;

Поиск в интернете этих двух строк не помог мне. Буду очень признателен за любые советы. Спасибо

Ответы [ 3 ]

4 голосов
/ 26 мая 2010

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

Чтобы создать отдельную программу из двух исходных файлов - сначала скомпилируйте каждый файл с параметрами -c (только для компиляции) - вы получите два .o файла, затем ссылка эти файлы вместе. Примерно так:

$ g++ -Wall -pedantic -ggdb -O -c -o module0.o module0.cpp
$ g++ -Wall -pedantic -ggdb -O -c -o module1.o module1.cpp
$ g++ -Wall -pedantic -ggdb -O -o prog module0.o module1.o

для сборки двоичного файла prog из двух исходных файлов.

Если вам нужно установить связь с какой-либо библиотекой, вам придется указать компилятору на ее заголовки с -I и на объекты с флагами -L, а затем скажите компоновщику, чтобы он фактически ссылался на библиотеку с -l.

Надеюсь, это поможет.

1 голос
/ 26 мая 2010

Вам нужна функция main, а у вас ее нет. Если у вас do есть функция main, покажите больше кода, пожалуйста.

0 голосов
/ 26 мая 2010

Похоже, main не определено. У вас есть одна определенная для вашей второй программы? Можете ли вы опубликовать более подробную информацию о теле источника, которое не может связаться?

...