是否有网站可以找到特定库及其版本中使用的符号。 对于例如我试图使用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。
对此有任何帮助将不胜感激..请不要在这个问题上打扰谷歌搜索。 你最终不会在哪里。
许多人提出这类问题但没有回答。
由于
答案 0 :(得分:1)
自从我在AIX上编译任何内容已经很久了(谢天谢地),我确实感到很痛苦,我花了大约一年时间试图让我们公司的JNI和其他软件库在AIX上构建。
我似乎记得GCC从未表现得特别好,因为它总是会遇到类似的错误。有没有选择使用本机编译器(xlC)?
如果不这样做,我会检查你的库的顺序,它在使东西正常工作方面发挥了重要作用..
我认为您已经使用nm实用程序遍历/ usr / lib(etc)中的每个库以查找缺少的符号所在的位置?
答案 1 :(得分:1)
这些是数学符号。尝试将-lm添加到链接行。
答案 2 :(得分:1)
这是因为您使用 gcc 编译了要链接到使用 xlc 编译的代码的库。或者至少是我的情况
您有两个选择:
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版本时,我看到了这种错误。例如,如果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位。检查编译器,链接器和库是否使用相同的位深模式。