机器类型(C ++库):i386与x86_64

伊萨姆(Issam T.)

我对不同的机器架构(32位,64位等)了解甚少。因此,在不同的机器上使用C ++库时,经常会遇到麻烦,被烦人的“体系结构未定义符号...”困扰。

如果有人可以向我解释为什么当我在同一台计算机(装有Mountain Lion OS的2岁Mac)上使用以下命令时为什么会得到如此令人困惑的答案,我将非常高兴man uname指示

-m打印机器硬件名称。

-p打印机器处理器体系结构名称。

  • 乍一看,我想说-p更相关。所以我跑步uname -p,我得到:

i386(如果我没有记错,则表示32位)。

  • 但是,对于在同一台计算机上编译的库,运行会lipo -info lib_test.a返回:

输入文件lib_test.a不是胖文件

非胖文件:lib_test.a是体系结构:x86_64(如果我没记错的话,表示64位

  • 后者然而与回报更加连贯uname -m

x86_64

干草

这是Mac OS X的奇怪之处。英特尔OS X随附的所有硬件都是64位的,操作系统也是如此-但是,可以强制以仅32位的模式运行它。除非以32位模式运行,否则它能够执行64位和32位二进制文​​件。

在此平台上提供的大多数二进制文件(.dylib和可执行文件)都是“胖”二进制文件,这意味着它们同时包含32位Intel二进制文件和64位Intel二进制文件,有时还将其他架构(Power PC)的二进制文件合并到一个文件中。系统将自动加载二进制文件中最合适的部分。

由于底层编译器通常需要使用不同的标志运行才能为不同的体系结构生成二进制文件,甚至平台的#define也不同,从而使编译器在预处理后看到不同的源代码,因此二进制文件需要在每个平台分别编译一次,并且然后结合使用脂质工具。XCode可以代表您自动执行此过程。

尽管系统能够运行32位和64位不同的二进制文件,但它们的执行模型不同,因此无法在同一进程地址空间中组合它们。因此,如果您有一个仅作为64位的库,而另一个只有32位的库,则不能一起使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么决定了在 64 位机器上构建的 32 位库是否需要 x86_64 或 i386 依赖项?

来自分类Dev

如何在x86-64机器上为i386目标构建rpm?

来自分类Dev

链接内核-输入文件的i386体系结构与i386:x86_64输出不兼容

来自分类Dev

如何使`go get`针对x86_64而不是i386构建

来自分类Dev

x86_64和i386有什么区别?

来自分类Dev

为什么在x86_64系统上安装i386版本的软件?

来自分类Dev

如何在x86_64 Swift项目中使用i386 Framework

来自分类Dev

使用C ++ Makefile.win检测Windows的i386与x64?

来自分类Dev

x86_64,i386,ia64和其他此类术语代表什么?

来自分类Dev

x86_64,i386,ia64和其他此类术语代表什么?

来自分类Dev

为什么即使我仅在x86_64系统上,iOS模拟器也需要i386和x86_64符号?

来自分类Dev

Xcode 6.1:文件是为x86_64构建的,该文件不是要链接的体系结构(i386)

来自分类Dev

编译和链接多个 C 库(卡在未找到架构 x86_64 的符号处)

来自分类Dev

机器类型“ x64”与目标机器类型“ X86”冲突

来自分类Dev

有什么办法可以停止从x86_64上的c ++标准库进行不对齐的访问?

来自分类Dev

没有要编译的架构(ONLY_ACTIVE_ARCH = YES,活动arch = x86_64,VALID_ARCHS = i386)

来自分类Dev

现在,Xcode 6 iOS Simulator(iPad2,iPhone5)的发布模式正在运行x86_64。调试i386

来自分类Dev

为什么安装软件包的i386版本会触发x86_64版本的删除?

来自分类Dev

来自C的NASM X86_64全局变量

来自分类Dev

Xcode C ++ ::架构x86_64的重复符号

来自分类Dev

为什么TempleOS无法在现代x86_64机器上运行?

来自分类Dev

使用Arch i386 for iPhone模拟器编译C库?

来自分类Dev

致命错误 LNK1112:模块机器类型“x64”与通过 vcvarsall.bat x86 运行构建的目标机器类型“X86”冲突

来自分类Dev

如何在freebsd上安装i386 / x86共享库?

来自分类Dev

尝试使用Swig将C ++库包装到Python时,体系结构x86_64的未定义符号

来自分类Dev

Boost原子128位原子类型x86_64

来自分类Dev

Boost原子128位原子类型x86_64

来自分类Dev

Qt5Cored.lib(Qt5Cored.dll):模块机器类型“ x64”与目标机器类型“ X86”冲突

来自分类Dev

带有 Fortran 的 Python 模块:LNK1112`模块机器类型'X86'与目标机器类型'x64'冲突

Related 相关文章

  1. 1

    什么决定了在 64 位机器上构建的 32 位库是否需要 x86_64 或 i386 依赖项?

  2. 2

    如何在x86-64机器上为i386目标构建rpm?

  3. 3

    链接内核-输入文件的i386体系结构与i386:x86_64输出不兼容

  4. 4

    如何使`go get`针对x86_64而不是i386构建

  5. 5

    x86_64和i386有什么区别?

  6. 6

    为什么在x86_64系统上安装i386版本的软件?

  7. 7

    如何在x86_64 Swift项目中使用i386 Framework

  8. 8

    使用C ++ Makefile.win检测Windows的i386与x64?

  9. 9

    x86_64,i386,ia64和其他此类术语代表什么?

  10. 10

    x86_64,i386,ia64和其他此类术语代表什么?

  11. 11

    为什么即使我仅在x86_64系统上,iOS模拟器也需要i386和x86_64符号?

  12. 12

    Xcode 6.1:文件是为x86_64构建的,该文件不是要链接的体系结构(i386)

  13. 13

    编译和链接多个 C 库(卡在未找到架构 x86_64 的符号处)

  14. 14

    机器类型“ x64”与目标机器类型“ X86”冲突

  15. 15

    有什么办法可以停止从x86_64上的c ++标准库进行不对齐的访问?

  16. 16

    没有要编译的架构(ONLY_ACTIVE_ARCH = YES,活动arch = x86_64,VALID_ARCHS = i386)

  17. 17

    现在,Xcode 6 iOS Simulator(iPad2,iPhone5)的发布模式正在运行x86_64。调试i386

  18. 18

    为什么安装软件包的i386版本会触发x86_64版本的删除?

  19. 19

    来自C的NASM X86_64全局变量

  20. 20

    Xcode C ++ ::架构x86_64的重复符号

  21. 21

    为什么TempleOS无法在现代x86_64机器上运行?

  22. 22

    使用Arch i386 for iPhone模拟器编译C库?

  23. 23

    致命错误 LNK1112:模块机器类型“x64”与通过 vcvarsall.bat x86 运行构建的目标机器类型“X86”冲突

  24. 24

    如何在freebsd上安装i386 / x86共享库?

  25. 25

    尝试使用Swig将C ++库包装到Python时,体系结构x86_64的未定义符号

  26. 26

    Boost原子128位原子类型x86_64

  27. 27

    Boost原子128位原子类型x86_64

  28. 28

    Qt5Cored.lib(Qt5Cored.dll):模块机器类型“ x64”与目标机器类型“ X86”冲突

  29. 29

    带有 Fortran 的 Python 模块:LNK1112`模块机器类型'X86'与目标机器类型'x64'冲突

热门标签

归档