在 AIX 上编译的帮助

发布于 2024-07-13 22:25:46 字数 748 浏览 6 评论 0原文

有没有一个网站可以找到特定库中使用的符号及其版本。 例如,我尝试使用 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。

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

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

谢谢

Is there a site where I can find the symbols used in a particular library and its version.
For e.g. I m trying to compile some code on AIX using gcc, and it throws me a lot of undefined symbol errors
For example, here is an output:

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

Where do I go to find where these symbols are.
If I run the same gcc command on Linux, it runs fine.

I tried including -lgcc also but then again it throws undefined symbols for some register_frame ...blah blah...
and I m getting sick of AIX.

Any help on this would be appreciated..and please don't bother Googling on this issue.
You will end up no where.

Many have asked this kind of questions but no answers.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

烟燃烟灭 2024-07-20 22:25:46

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

Those are math symbols. Try adding -lm to your link line.

橘亓 2024-07-20 22:25:46

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

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

如果我没有检查你的库的顺序,它在使东西正常工作方面发挥了重要作用。

我认为你已经使用 nm 实用程序来迭代 /usr/lib (等)中的每个库以查找缺失的符号找到了吗?

It's been a long time since I compiled anything on AIX (thankfully) and I do feel your pain having spent a good year or so trying to get our company's JNI and other software libraries built on AIX.

I do seem to remember that GCC never worked particularly well as it always came up with similar errors. Is there any option to use the native compiler (xlC)?

Failing that I would check the ordering of your libraries, it plays a big part in making stuff work properly..

I take it that you have use the nm utility to iterate through every library in /usr/lib (etc) to find where the missing symbols are located?

网名女生简单气质 2024-07-20 22:25:46

这是因为您使用了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 
  

This is because you used the gcc to compile a library you want to link to a code compiled with xlc. Or at least is my case

You have 2 options:

  1. use the xlc instead of gcc for all the compilation (don't mix gcc and xlc)
  2. compile with xlc but calling also the gcc libraries, for instance:
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
多孤肩上扛 2024-07-20 22:25:46

主要问题是:

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

当使用在 AIX 的低版本上编译的 GCC 版本时,我曾见过这种错误。 例如,如果 GCC 是为 AIX 4.3.3 编译的并且正在 AIX 5.x 上运行。 通常,如果 GCC 是在 AIX 的高版本上编译的,则它不会在低版本上运行,因此这不太可能是问题。

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

Mostly questions:

  • Which version of GCC?
  • Which version of AIX are you on?
  • Which version of AIX was your copy of GCC built for?
  • What exactly is the link line you are using?

I've seen that sort of error when using a version of GCC compiled on a down-version of AIX. For example, if the GCC was compiled for AIX 4.3.3 and is being run on AIX 5.x. Usually, if GCC was compiled on an up-version of AIX, it won't run on the down-version, so that is unlikely to be the problem.

One other (rather unlikely) possibility: is your GCC installed where it was compiled to expect to be installed? When you build it, you specify (possibly implicitly) the install location (by default, under /usr/local). If you have your copy installed somewhere else, but there's an old GCC in /usr/local and your copy expects to be installed in /usr/local, then you can run into this sort of problem. This is much less likely than version mismatching.

想挽留 2024-07-20 22:25:46

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

Listed external symbols are from libgcc so add of -lgcc is correct. And register_frame also is part of libgcc but only for 32-bit. Check if you use the same bit depth mode for you compiler, linker and libraries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文