2014-09-09 3 views
0

Je rencontre un problème avec mes symboles globaux. J'ai une classe qui est compilée avec la visibilité par défaut (le reste du code est caché) et non-inline. L'exécutable est également lié à l'indicateur -E. Cette classe est appelée à partir d'une bibliothèque qui est chargée par dlopen; donc ses symboles doivent être GLOBAL.Les symboles globaux deviennent locaux au lien

Quand je regarde le fichier .o, les choses sont ok: FUNC DEFAULT GLOBAL

Toutefois, dans le binaire final, même fonction se transforme en ceci: FUNC DEFAULT LOCAL

Je pense que les sections gc- cause cela et je ne peux pas me permettre de ne pas l'utiliser. Est-il possible de dire à gc-sections d'ignorer les API publiques?

+0

Vous n'avez pas fourni suffisamment d'informations pour répondre à votre question. Pièces manquantes: quel éditeur de liens (or ou ld), quelle version, quelle est la ligne de commande de l'éditeur de liens, y a-t-il des scripts de liens impliqués, et si oui, que contiennent-ils? –

+0

À ce stade, je crois que c'est un bug de l'éditeur de liens. Il y a aussi plusieurs bogues liés à gc-sections dans binutils bugzilla; et je pense que je frappe l'un d'entre eux. J'ai essayé la même ligne de lien avec une version de toolchain très récente et cela a fonctionné comme je l'attendais. –

Répondre

0

Toutefois, dans le binaire final, même fonction se transforme en ceci: FUNC DEFAULT LOCAL

Ceci est le plus passe probablement parce que vous avez quelque chose sur la ligne de commande de liaison qui indique l'éditeur de liens pour le faire. Peut-être que vous avez un script de version de l'éditeur de liens qui fait cela?

Je pense que les sections gc-est à l'origine de cette

Cette conjecture est très peu probable.

Questions connexes