帮助在AIX上编译

时间:2009-02-17 06:35:28

标签: gcc aix

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

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抛出了未定义的符号......等等...... 我厌倦了AIX。

对此有任何帮助将不胜感激..请不要在这个问题上打扰谷歌搜索。 你最终不会在哪里。

许多人提出这类问题但没有回答。

由于

5 个答案:

答案 0 :(得分:1)

自从我在AIX上编译任何内容已经很久了(谢天谢地),我确实感到很痛苦,我花了大约一年时间试图让我们公司的JNI和其他软件库在AIX上构建。

我似乎记得GCC从未表现得特别好,因为它总是会遇到类似的错误。有没有选择使用本机编译器(xlC)?

如果不这样做,我会检查你的库的顺序,它在使东西正常工作方面发挥了重要作用..

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

您有两个选择:

  1. 使用xlc而不是gcc进行所有编译(不要混用gcc和xlc)
  2. 使用xlc编译,但也调用gcc库,例如:
  3. 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
    

答案 3 :(得分:0)

主要是问题:

  • 哪个版本的海湾合作委员会?
  • 您使用的是哪个版本的AIX?
  • 您的GCC副本是哪个版本的AIX?
  • 您使用的链接线究竟是什么?

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

另一种(相当不可能)的可能性:你的GCC安装在哪里被编译为预期安装?在构建它时,您指定(可能隐式)安装位置(默认情况下,在/usr/local下)。如果您已将副本安装在其他位置,但/usr/local中存在旧的GCC,并且您的副本预计将安装在/usr/local中,则可能会遇到此类问题。这比版本不匹配的可能性小得多。

答案 4 :(得分:0)

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