【问题标题】:Creating a 64 bit shared library for aix powerpc为 aix powerpc 创建 64 位共享库
【发布时间】:2015-01-31 11:46:14
【问题描述】:

我正在尝试为 AIX 7.1 创建一个共享库,但我不断收到那些未定义的引用错误,我正在尝试通过各种尝试来覆盖它们,但正如您所见,它不起作用。有人可以帮忙吗?我使用的 gcc 是独立的,但它是为同一台机器构建的,并且由同一台机器托管。我正在使用我也为这台机器构建的 binutils 2.22 附带的 ld。谢谢!

bash-4.2$ gcc -shared .libs/nvector_serial.o ../..//src/sundials/.libs/sundials_math.o -lm -Wl,--allow-shlib-undefined -Wl,-u -Wl,.strdod -Wl,-u -Wl,.__fd_select -Wl,-u -Wl,.printf -Wl,-u -Wl,.putchar -Wl,-u -Wl,.malloc -Wl,-u -Wl,.free -Wl,-soname -Wl,libsundials_nvecserial.so.0 -o .libs/libsundials_nvecserial.so.0.0.2 .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x24): 未定义引用.strtod' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xb0): undefined reference to.__fd_select' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x118): 未定义引用.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x148): undefined reference to.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x168): 未定义引用.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x17e): relocation truncated to fit: R_TOC againstN_VClone_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x18e):重定位被截断以适应:R_TOC 针对N_VCloneEmpty_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x19e): relocation truncated to fit: R_TOC againstN_VDestroy_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1ae):重定位被截断以适应:R_TOC 针对N_VSpace_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1be): relocation truncated to fit: R_TOC againstN_VGetArrayPointer_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1ce):重定位被截断以适应:R_TOC 针对N_VSetArrayPointer_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1de): relocation truncated to fit: R_TOC againstN_VLinearSum_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1ee):重定位被截断以适应:R_TOC 针对N_VConst_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1fe): relocation truncated to fit: R_TOC againstN_VProd_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x20e):重定位被截断以适应:R_TOC 针对N_VDiv_Serial' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x21e): additional relocation overflows omitted from the output .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x314): undefined reference to.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x334): 未定义引用.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x340): undefined reference to.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x448): 未定义引用.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x5f8): undefined reference to.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x770): 未定义引用.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x90c): undefined reference to.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x9f8): 未定义引用.printf' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xa20): undefined reference to.putchar' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xa9c): 未定义引用.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xacc): undefined reference to.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xaec): 未定义引用.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xe28): undefined reference to.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xe48): 未定义引用.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xe54): undefined reference to.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0xf84): 未定义引用.malloc' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x1074): undefined reference to.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x10a4): 未定义引用.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x10cc): undefined reference to.free' .libs/nvector_serial.o:./nvector_serial.c:(.pr+0x10e8): 未定义引用.free' ../..//src/sundials/.libs/sundials_math.o:./sundials_math.c:(.pr+0x24): undefined reference to.strtod' ../..//src/sundials/.libs/sundials_math.o:./sundials_math.c:(.pr+0xb0): 未定义引用`.__fd_select' collect2: ld 返回 1 个退出状态 bash-4.2$ 文件 nvector_serial.o nvector_serial.o:64 位 XCOFF 可执行文件或目标模块未剥离 bash-4.2$

【问题讨论】:

  • ittoolbox.com 上有更多的 AIX 负责人。注册并找到主题所在的“组”。祝你好运。
  • 我去看看,谢谢!

标签: 64-bit aix


【解决方案1】:

您只需要从 libc 导入您的 libc 符号,而不是您想要做的所有事情。 libc.a 中包含共享对象,因此结果会将其用作依赖项。即只需输入 -lc。

这可能不是您的所有问题,但会清除很多错误。

【讨论】:

    【解决方案2】:

    谢谢大家的回复

    我通过使用 64 位指令集作为选项 -mpowerpc64 重新编译解决了一些“截断以适应错误”,我认为是,我不知道问题到底是什么,但可能是我不知何故让 gcc 编译为 64 位地址空间(-maix64 但没有 -mpowerpc64),但只使用 32 位指令集,这很奇怪,因为我相信 -maix64 应该暗示 -mpowerpc64。我也可能使用过 -mminimal-toc,但我仍然怀疑 TOC 条目是否溢出

    其余的错误(未定义的引用):我不记得它们出现的确切原因,因为我尝试了很多方法来告诉 ld 忽略未解析的符号,但它没有用。

    我最终在链接阶段使用 XLC 编译器并解决了其余的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2014-08-23
      • 2013-11-14
      • 2016-03-03
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多