7

GCC 4.5 では、ランタイム ライブラリ (http://gcc.gnu.org/gcc-4.5/changes.html) に 10 進浮動小数点のサポートが追加されました。名前空間 std::decimal を使用してからコード内で decimal64 などを使用して、 を含むコードをコンパイルできます。

残念ながら、コードをリンクするためのライブラリが不足しています。必要なライブラリを見つけることができませんでした。DFP サポートが gcc で有効になっている (--enable-decimal-float=dpd)

さらに、コードで小数リテラルを提供する高速な方法が必要ですか? 高速とは、テンプレートによって処理され、コンパイル時に変換されるユーザー定義のリテラルを意味します。実行時に変換される double を提供したくありません (パフォーマンスと、コンパイル時から実行時に評価を移動することに本当に耐えられないという事実にもかかわらず、まだ丸めの問題があります...)。サフィックス「df」は既に見つけましたが、コンパイラによって認識されないようです。

ターゲット powerpc-ibm-aix7.1.0.0 で gcc バージョン 4.7.1 を使用しています。

リンカー エラー メッセージ:

ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsisd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsidd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsitd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_mulsd3
ld: 0711-317 ERROR: Undefined symbol: .__dpd_muldd3
ld: 0711-317 ERROR: Undefined symbol: .__dpd_multd3
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdisd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdisd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdidd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdidd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatditd
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsditd

ティア。

4

1 に答える 1

1

最近、ソースから gcc4.7.1 をコンパイルしましたが、シンボル __floatnsidf が見つからないという問題がありました。これは、libstdc++.so で必要とされ、libgcc_s.so で定義されているシンボルであることが判明しました。両方のライブラリが gcc によって提供されていることを考えると、互換性があるはずです。私の場合、ターゲットプラットフォームから持ち上げた古いバージョンの libgcc_s へのリンカインクルードがまだありました。おそらくやる価値がある

# to find out where libstdc++.so is:
gcc -print-file-name=libstdc++.so

# see if it references the symbol you're missing
readelf -a "path to libstdc++.so" | grep "symbol name"

次に、libgcc_s に対して同じことを行って、欠落しているシンボルが両方とも定義されているかどうかを確認します。Nb 1 は、シンボルを未定義としてマークします。これが、リンカがその必要性を認識する方法です。

于 2012-09-01T11:23:19.693 に答える