2010-09-01 7 views
1

Je suis confronté à un problème étrange, mais incapable de le simuler à une échelle plus petite. Le problème est que ma table de symboles a une entrée de mes symboles externes. Ceux-ci sont déclarés dans un fichier d'en-tête. Définis dans un autre fichier - header.cExtern Symboles dans les fichiers objet

fichier d'en-tête

header.h 

extern void rlog(int , char*, ...); 
extern int SetGDebug(string); 
extern int GDebug; 

test.cpp C++ fichier

#include <header.h> 

nm -CA test.o | grep De 

00000000 B GDebug 
00000b70 t global constructors keyed to GDebug 
00000070 T SetGDebug() 

drapeaux de compilation: -Wall -O2 -shared -fPIC -funroll boucles compilateur: g ++

Ceci comme prévu entraîne une redéfinition multiple ....

Une autre petite question ...

Est-ce qu'un symbole/fonction externe-nd se rend à la table de symboles du fichier objet?

Répondre

1

Vous n'avez pas besoin de déclarer des fonctions externes, seulement des variables.

+0

True, mais cela ne devrait toujours pas provoquer ce comportement inattendu. Cela se produit à la fois pour la fonction et la variable dans le fichier. –