"Duplicate symbol: __fe_def_env"是什么意思?



在使用XLC上构建AIX的共享库时,您会看到此链接器警告:

ld: 0711-224 WARNING: Duplicate symbol: __fe_def_env

要复制,请使用此源文件fenvtest.c

#include <fenv.h>
void exported_func() {
  fenv_t f;
  (void)fegetenv(&f);
}

然后运行以下命令:

$ 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.

通常,当使用共享库和链接器选项-bexpfull时,就会发生有关__fe_def_env的警告。有关-bexpfull的更多说明。

,请参见链接器文档。

/usr/include/fenv.h中定义了符号__fe_def_env

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

因此,它包含在包括fenv.h的每个对象中。因此,如果使用-bexpfull或导出__fe_def_env的其他选项构建共享对象时,此符号将与其他文件中的同名符号相撞。

您可以避免警告:

  • 使用-bexpall代替-bexpfull
  • 自定义导出列表以排除__fe_def_env

也就是说,警告是无害的,可能会被忽略。

相关内容

最新更新