如何在Gnu C++(g ++)中使用十进制浮点?

use*_*081 7 c++ gcc powerpc decimal

GCC 4.5在运行时库中增加了对十进制浮点的支持(http://gcc.gnu.org/gcc-4.5/changes.html).我能够编译代码,包括使用命名空间std :: decimal,然后在代码中使用decimal64等.

不幸的是,我缺少一些用于链接代码的库.我无法找出应该要求哪些库.已在gcc中启用DFP支持(--enable-decimal-float = dpd)

另外,是否应该有一些快速的方法在代码中提供十进制文字?快速,我的意思是用户定义的文字,由模板处理并在编译时翻译.我不想提供在运行时转换的双精度数(尽管性能和事实上我真的无法将评估从编译时间转移到运行时仍存在舍入问题......).我已经找到了后缀"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
Run Code Online (Sandbox Code Playgroud)

TIA.

Fen*_*r34 1

我最近从源代码编译了 gcc4.7.1,但遇到了缺少符号 __floatunsidf 的问题。事实证明,这是 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"
Run Code Online (Sandbox Code Playgroud)

然后对 libgcc_s 执行相同的操作,看看它们是否都定义了您缺少的符号。注意,人们会将符号标记为未定义 - 这就是链接器如何知道其需要的方式。