1

在 AIX 上使用 xlc 构建共享库时,您会看到以下链接器警告:

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

1 回答 1

1

__fe_def_env通常,在构建共享库并使用链接器选项时会出现警告-bexpfull有关-bexpfull.

符号__fe_def_env定义在/usr/include/fenv.h

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

所以它包含在每个包含fenv.h. 因此,如果使用 export-bexpfull或其他选项构建共享对象时__fe_def_env,此符号将与其他文件中的同名符号发生冲突。

您可以通过以下方式避免警告:

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

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

于 2016-06-23T12:21:17.967 回答