C ne peut pas compiler - symbole (s) non trouvé pour l'architecture x86_64
Avoir un sérieux problème avec mon code en C, j'ai juste ne semblent pas être en mesure de l'obtenir pour compiler et je ne peux vraiment pas comprendre pourquoi.
J'ai essayé des recherches en ligne et ne pouvez pas trouver une solution à ce problème, avez-vous une idée?
Merci pour votre temps!
Undefined symbols for architecture x86_64:
"_Insert", referenced from:
_InsertNode in part1.o
(maybe you meant: _InsertNode)
"_Create", referenced from:
_findShortestPaths in part1.o
"_DeleteMin", referenced from:
_findShortestPaths in part1.o
"_decreaseKey", referenced from:
_findShortestPaths in part1.o
"_GetMin", referenced from:
_findShortestPaths in part1.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [part1] Error 1
Snippits de part1.c
#include "limits.h"
#include "pegBinaryHeap.h"
void InsertNode(int distance, Node* node, PriorityQueue PQ) {
...
Insert(*item, PQ);
}
...
int* findShortestPaths(Graph *graph, int start) {
...
//Priority queue ordered by distance
PriorityQueue pq = Create(graph->MaxSize);
for(int i = 0; i < graph->MaxSize; i++) {
...
}
//While the queue isn't empty:
while((currentPqItem=GetMin(pq)) != NULL) {
...
DeleteMin(pq);
//for each node accesable from currentNode
List *currentNeighbour = currentNode.outlist;
while(currentNeighbour!=NULL) {
...
decreaseKey(currentNode.id, newDistance, pq);
} //end for
}//end while
}
int main(int argc,char *argv[])
{
Graph mygraph;
return 0;
}
Et la .h fichier qu'il semble s'en plaindre
#include "graph.h"
struct HeapStruct;
typedef struct HeapStruct *PriorityQueue;
typedef struct {
int distance;
Node *node;
} QueueType;
PriorityQueue Create( int MaxSize );
void Destroy( PriorityQueue H );
int Insert( QueueType Item, PriorityQueue H );
QueueType DeleteMin( PriorityQueue H );
QueueType* GetMin( PriorityQueue H );
void decreaseKey(int nodeId, int value, PriorityQueue H);
source d'informationauteur Pez Cuckow | 2012-04-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez compilermais vous ne pouvez pas lien.
part1.o
est en utilisant les fonctions que vous avez défini dans votre dernier.h
fichier et la mise en œuvre ne peut pas être trouvé. Lorsque vous liez votre programme, vous devez vous assurer que vous créez un lien dans le fichier d'objet(s) (ou bibliothèques) qui contiennent l'implémentation de ces fonctions. Vous avez probablement fait quelque chose comme:gcc part1.c -o myapp
et si l'éditeur de liens n'ont pas toutes les pièces du puzzle.
Si vous voulez compiler en pièces, vous devez:
Ici, tous les
.c
les fichiers sont compilés en un objet (.o
) les fichiers séparément, et ensuite liés ensemble dans un fichier exécutable. Ou vous pouvez tout faire à la fois:Si les implémentations sont dans une bibliothèque (
libimplementations.a
):Je voudrais ajouter que je recevais une semblable erreur de compilation. Voir ci-dessous.
J'ai résolu ce problème par la mise en œuvre de la méthode add() les fonctions de prototype que j'avais créé dans mon fichier d'en-tête. Une fois mis en œuvre, je n'ai pas cette erreur se produit plus. Peut aider quelqu'un d'autre.
De quoi votre commande compile? Il semble que vous ne sont pas en disant qu'il lier la bibliothèque ces routines sont à l'intérieur.
J'aimerais essayer de créer un minimaliste exemple qui montre la même erreur. Il nous manque trop d'informations pour vous aider à diagnostiquer. Le code dans les autres fichiers et la compilation des commandes (et pas seulement une partie d'un Makefile mais les commandes) pourrait être la source de ce problème.
(oui, ce devrait être un commentaire plutôt qu'une réponse, mais je ne suis pas en mesure de commenter sur les questions pour une raison quelconque)