我对此并不陌生,我正尝试将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 0x 0)链接的架构(x86_64):Estudiant.o
架构x86_64的 undefined symbol :

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

最佳答案

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

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

在OS X上,使用胖二进制方法,其中单个库或可执行文件在一个文件中都包含32位和64位目标文件(几年前,库中最多包含4种不同的文件所有版本,例如PPC 32,PPC 64,x86 32,x86 64)。

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

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

关于c++ - OSX与Linux g++-multilib等效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18834235/

10-13 03:30