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

7
GCC 4.5在运行库中添加了十进制浮点数支持(http://gcc.gnu.org/gcc-4.5/changes.html)。我能够编译包括“using namespace std::decimal”在内的代码,然后在代码中使用decimal64等内容。但是,很遗憾,我缺少一些用于链接代码的库。我还没有找到应该需要哪些库。DFP支持在gcc中启用(--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

TIA.


_Decimal64 的字面后缀是 dd_Decimal32df),但这并不能解释为什么编译器不能识别后者(更不用说 DPD 例程了)。你是否尝试向编译器传递 --enable-version-specific-runtime-libs 参数? - Frédéric Hamidi
你真的想把那个选项传递给编译器吗?它无法被识别。 "g++ -v" 显示编译器本身已经配置了该选项。 - user1034081
1个回答

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"

然后对libgcc_s执行相同的操作,以查看它们是否都定义了您缺少的符号。其中一个将标记该符号为未定义 - 这是链接器知道其所需的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接