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?
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. –