Question

Je construis quelque chose sur HPUX. Code fonctionne très bien dans Sun / Linux / AIX.

Mais il se plaint HPUX sur

[sshexec] /usr/ccs/bin/ld: Unsatisfied symbols:
[sshexec]    globalVar (first referenced in blah.o)

Encore une fois le code approprié dans la version de débogage, mais pas dans. Tout ce qu'il fait, il utilise la variable globale définie dans un autre fichier

extern globPck globalVar;

globPck est classe cointains globale des choses.

Je suis plus intéressé par les idées ce qui pourrait être la raison pour que cela fonctionne dans la version mais pas dans Debug.

J'ai regardé des fichiers sur .i (fichier d'en-tête précompilés généré avec -E) Et il semble défini de la même façon.

Je devine quelque chose qui est frappé dans le chemin de code version corrige mais je suis ici pour entendre si yall ont quelques idées.

Était-ce utile?

La solution

La première chose à faire lorsque l'éditeur de liens se plaint que quelque chose n'est pas défini est d'aller trouver pour vous-même où cette chose défini. Si vous ne trouvez pas, alors ne vous attendez pas l'éditeur de liens pour le trouver, que ce soit.

Qu'est-ce que vous avez montré est une déclaration, pas une définition. Une définition sera pas le mot-clé extern. Il devrait y avoir une définition dans exactement une .cpp dans votre projet, pas un en-tête.

Une fois que vous avez trouvé la définition, alors vous pouvez commencer à travailler sur la raison pour laquelle l'éditeur de liens ne voit pas. Peut-être qu'il est défini que lorsque certains symboles sont présents, tels que DEBUG ou NDEBUG.

S'il n'y a pas de définition, alors peut-être tous les utilise de celui-ci supprimeront lors de la compilation de libération (peut-être parce que toutes les utilisations se produisent dans les déclarations de assert que les passe sous silence du compilateur), de sorte que la définition manquante n'est pas remarqué dans le mode de libération.

Autres conseils

Le compilateur HPUX aime « Optimize away » appels à des cours mondiaux Constructor si les classes ne sont accessibles indirectement à partir du chemin principal d'exécution. Essayez d'ajouter d'un simple printf () avec la valeur de la variable dans votre thread principal quelque part un voir si le problème dissappears.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top