【问题标题】:Using 32-bit shared libraries on 64-bit system在 64 位系统上使用 32 位共享库
【发布时间】:2021-12-22 06:57:24
【问题描述】:

我有一些 32 位架构的库,我想用它们在我的 64 位架构系统上进行编译。尽管我安装了外国架构i386和gcc-multilib,但我仍然编译错误:

/usr/bin/ld: skipping incompatible ../rep/Fipe/libOTB.so when searching for -lOTB
/usr/bin/ld: cannot find -lOTB
/usr/bin/ld: cannot find -lglut
collect2: error: ld returned 1 exit status

共享库有以下规格:

ELF 32-bit LSB shared object, intel 80386, version 1 (SYSV), dynamically linked, with debug info, not striped

【问题讨论】:

  • 32 ≠ 64。要做你想做的事,你需要在 32 位程序中托管 32 位共享库,然后从 64 位程序到 32 位辅助应用程序进行 IPC .

标签: c++ g++ shared-libraries ubuntu-18.04 32bit-64bit


【解决方案1】:

答案是:你不能

GCC-multilib 用于交叉编译:编译程序以用于与用于编译的架构不同的架构。

它不会让您执行代码用于与您正在使用的架构不同的架构。

tl;dr :您不能在同一进程中混合使用 32 位和 64 位代码。

嗯,你可以,但这样做是一场噩梦,而且真的很脆弱。除非你有明确的理由,否则不要这样做。不应该有任何你不能在 64 位中获得的 32 位库。 (除非你运行的是非常旧的、过时的东西,在这种情况下你应该编译一个 32 位程序。)

【讨论】:

  • 但是在 gcc-multilib 的帮助下使用 32 位共享库应该可以工作,不是吗?
  • @Digger • gcc-multilib 对于交叉编译很有用。
  • 来自 Debian.org 的引文:“Multiarch 允许您在同一台机器上安装来自多个体系结构的库包。这在很多方面都很有用,但最常见的是同时安装 64 位和 32 位软件同一台机器并自动正确解决依赖关系。”
猜你喜欢
  • 2010-12-14
  • 2014-08-23
  • 2013-11-14
  • 1970-01-01
  • 2019-07-06
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多