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