1

我是新手,我正在尝试将 64 位编译文件链接到 32 位目标文件,但出现此错误:

ld:警告:忽略文件 Estudiant.o,文件是为不受支持的文件格式(0x7f 0x45 0x4c 0x46 0x 1 0x 1 0x 1 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0)构建的正在链接的架构 (x86_64):Estudiant.o 架构 x86_64 的未定义符号:

我想我需要在 linux 中安装 g++-multilib,但我找不到 osx 的等价物。有谁知道如何解决这个问题?

4

1 回答 1

2

在 Linux 和 OS X 上,您只能将所有 64 位目标文件和库链接在一起,或者将所有 32 位目标文件和库链接在一起。关于库,两个操作系统使用不同的方法来管理 32 位和 64 位的共存。

在Linux 上,使用multilib 方法,其中bot 有32 位和64 位版本的同一库,通常具有相同的名称但位于两个不同的目录中,例如/lib 和/lib64。

在 OS X 上,使用 fat-binary 方法,其中单个库或可执行文件包含 32 位和 64 位目标文件,所有这些文件都在一个文件中(几年前会有最多包含 4 个不同的库一切的版本,PPC 32、PPC 64、x86 32、x86 64)。

这就是为什么在 OS X 上没有直接等效于 multilib 的原因,你没有多个库只是因为你需要 32 位和 64 位!

要构建应用程序,您需要始终将所有目标文件构建为 32 位或 64 位(就像在 Linux 上一样,您不能在任一系统上混合使用),然后,希望所有使用的库都包含(至少)您需要的版本。否则,您需要开始研究构建所需的库,但系统附带的大多数东西都应该支持 32 位和 64 位。

于 2013-09-16T20:48:14.540 回答