1

是否有一个站点可以找到特定库中使用的符号及其版本。例如,我试图在 AIX 上使用 gcc 编译一些代码,它给我带来了很多未定义的符号错误例如,这是一个输出:

ld: 0711-317 ERROR: Undefined symbol: .__fixdfdi
ld: 0711-317 ERROR: Undefined symbol: .__divdi3
ld: 0711-317 ERROR: Undefined symbol: .__moddi3
ld: 0711-317 ERROR: Undefined symbol: .__floatdidf
ld: 0711-317 ERROR: Undefined symbol: .__umoddi3
ld: 0711-317 ERROR: Undefined symbol: .__udivdi3
ld: 0711-317 ERROR: Undefined symbol: .__fixunsdfdi

我在哪里可以找到这些符号在哪里。如果我在 Linux 上运行相同的gcc命令,它运行良好。

我也尝试包括在内-lgcc,但它又会为某些register_frame...blah blah... 抛出未定义的符号,而且我厌倦了 AIX。

对此的任何帮助将不胜感激..请不要在这个问题上使用谷歌搜索。你最终将无处可去。

许多人问过这类问题,但没有答案。

谢谢

4

5 回答 5

1

自从我在 AIX 上编译任何东西以来已经有很长时间了(谢天谢地),我确实感受到了您的痛苦,因为花了一年左右的时间试图让我们公司的 JNI 和其他在 AIX 上构建的软件库。

我似乎确实记得 GCC 从来没有特别好用,因为它总是会出现类似的错误。有没有使用本机编译器(xlC)的选项?

如果我不检查你的图书馆的顺序,它在使东西正常工作方面起着重要作用..

我认为您已经使用 nm 实用程序遍历 /usr/lib (等)中的每个库以查找丢失符号的位置?

于 2009-02-17T07:04:18.953 回答
1

这些是数学符号。尝试将 -lm 添加到您的链接行。

于 2009-03-28T06:29:57.587 回答
1

这是因为您使用gcc编译了一个要链接到使用xlc编译的代码的库。或者至少是我的情况

您有 2 个选项:

  1. 使用 xlc 而不是 gcc 进行所有编译(不要混合 gcc 和 xlc)
  2. 使用 xlc 编译但也调用 gcc 库,例如:
sudo  find  / -name libgcc.a
/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/libgcc.a

/opt/IBM/xlC/13.1.0/bin/xlC -g  -o MyBIN MyBIN.o  -L/usr/etctera -
 L/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ -lgcc -letcetera
于 2017-07-20T12:39:51.450 回答
0

主要是问题:

  • 哪个版本的 GCC?
  • 您使用的是哪个版本的 AIX?
  • 您的 GCC 副本是为哪个版本的 AIX 构建的?
  • 您使用的链接线到底是什么?

在使用在 AIX 的低版本上编译的 GCC 版本时,我已经看到了这种错误。例如,如果 GCC 是为 AIX 4.3.3 编译的,并且正在 AIX 5.x 上运行。通常,如果 GCC 是在 AIX 的向上版本上编译的,它不会在向下版本上运行,所以这不太可能是问题。

另一种(不太可能)的可能性:您的 GCC 是否安装在编译预期安装的位置?当你构建它时,你指定(可能是隐式的)安装位置(默认情况下,在 下/usr/local)。如果您将副本安装在其他地方,但其中有一个旧的 GCC,/usr/local并且您的副本希望安装在 中/usr/local,那么您可能会遇到此类问题。这比版本不匹配的可能性要小得多。

于 2009-02-17T08:29:33.117 回答
0

列出的外部符号来自libgcc所以添加-lgcc是正确的。register_frame也是 32 位的一部分,但libgcc仅适用于 32 位。检查您是否为编译器、链接器和库使用相同的位深度模式。

于 2019-11-23T15:37:06.670 回答