7

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

TIA。

4

1 回答 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 执行相同的操作,以查看它们是否都定义了您缺少的符号。Nb 会将符号标记为未定义 - 这就是链接器如何知道它的要求。

于 2012-09-01T11:23:19.693 回答