2010-05-25 7 views
1

Je rencontre des difficultés pour compiler un programme que j'ai écrit. J'ai deux fichiers différents avec le même comprend, mais une seule génère l'erreur suivante lors de la compilation avec g ++Problème de compilation dans les bibliothèques x86_64 standard

/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 

Les fichiers que je suis compris dans ma tête sont les suivantes:

#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; 

La recherche sur Internet pour ces deux lignes n'ont pas abouti à rien pour m'aider. Je serais très reconnaissant pour tout conseil. Merci

+0

Pourriez-vous nous donner la source complète, ou au moins quelques lignes avant main() dans le fichier qui ne parvient pas à compiler? – ivans

+0

Salut tous merci pour les conseils. J'ai suivi certains de vos conseils et j'ai réalisé que je ne comprenais pas le besoin d'un plat comme je le programmais. Je pensais pouvoir compiler en fonction. Il semble que j'ai beaucoup à apprendre. – user350282

Répondre

1

Vous avez besoin d'une fonction main et vous n'en avez pas. Si vous faire avez une fonction main, montrez plus de code s'il vous plaît.

0

Il semble que main n'est pas défini. En avez-vous défini un pour votre deuxième programme? Pouvez-vous poster plus de détails sur le corps source qui ne parvient pas à lier?

+0

Merci. C'était tout ce dont j'avais besoin pour comprendre pourquoi mon code ne fonctionnait pas. Nécessaire de définir un principal juste pour appeler ma fonction. – user350282

4

Pour créer deux programmes distincts vous avez besoin des deux fichiers source pour définir la fonction main().

Pour construire un programme unique de deux fichiers source - d'abord compiler chaque fichier avec des options -c (compilation uniquement) - vous obtiendrez deux fichiers .o, puis lien ces fichiers ensemble. Quelque chose comme ceci:

$ 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 

pour construire prog binaire de deux fichiers source.

Si vous devez créer un lien avec une bibliothèque, vous devrez pointer compilateur avec les en-têtes il est -I et à des objets avec -L drapeaux, puis dire l'éditeur de liens pour référencer réellement la bibliothèque -l.

Espérons que cela aide.