2016-06-23 6 views
1

XLCとAIX上の共有ライブラリを構築するとき、あなたはこのリンカの警告を参照してください。このソースファイルfenvtest.c使用し、再現するために"Duplicate symbol:__fe_def_env"は何を意味しますか?

ld: 0711-224 WARNING: Duplicate symbol: __fe_def_env 

を:

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

答えて

1

一般に、__fe_def_envに関する警告は、共有ライブラリを構築するときに発生し、リンカオプション-bexpfullが使用されます。 See the linker documentation for more explanation of -bexpfull.

シンボル__fe_def_env/usr/include/fenv.hで定義されている:

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

それはfenv.hを含むすべてのオブジェクトに含まれています。そのため、共有オブジェクトが-bexpfullまたは別のオプションの__fe_def_envでビルドされている場合、このシンボルは他のファイルの同じ名前のシンボルと衝突します。

次の方法で警告を回避することができます:警告は無害であり、無視することができる、と述べた__fe_def_env

を除外するためにエクスポート・リストのカスタマイズ-bexpall代わりの-bexpfull

  • を使用して

  • +0

    'fenv.h'を' extern const fenv_t __fe_def_env'に編集することができます。 __fe_def_envは 'libm'で定義されています –

    関連する問題