2016-06-23 8 views
1

Lors de la construction d'une bibliothèque partagée sur AIX avec xlc, cet avertissement se linker:Que signifie "Dupliquer le symbole: __fe_def_env"?

ld: 0711-224 WARNING: Duplicate symbol: __fe_def_env 

Pour reproduire, utiliser ce fichier source fenvtest.c:

#include <fenv.h> 

void exported_func() { 
    fenv_t f; 
    (void)fegetenv(&f); 
} 

Lancez ensuite la commande suivante:

$ xlc -G -o fenvtest.so -lm -Wl,-bexpfull fenvtest.c 
ld: 0711-224 WARNING: Duplicate symbol: __fe_def_env 
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. 

Répondre

1

Généralement l'avertissement sur __fe_def_env se produit lors de la construction d'une bibliothèque partagée et l'option de l'éditeur de liens -bexpfull est utilisé. See the linker documentation for more explanation of -bexpfull.

Le symbole __fe_def_env est défini dans /usr/include/fenv.h:

const fenv_t __fe_def_env = { FE_TONEAREST, 0, 0, 0, 0 }; 

il est inclus dans chaque objet qui comprend fenv.h. Pour cette raison, si un objet partagé est construit avec -bexpfull ou une autre option qui exporte __fe_def_env, ce symbole entrera en collision avec le symbole du même nom dans d'autres fichiers.

Vous pouvez éviter l'avertissement par:

  • En utilisant -bexpall au lieu de -bexpfull
  • Personnalisation de la liste d'exportation pour exclure __fe_def_env

Cela dit, l'avertissement est sans danger et peut être ignoré.

+0

Vous pouvez éditer 'fenv.h' à' extern const fenv_t __fe_def_env'. __fe_def_env est défini dans 'libm' –