我是新手,我正在尝试将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的等价物。有谁知道如何解决这个问题?
答案 0 :(得分:1)
在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位。