linux系统i386和X86区别,linux – i386:x64-32 vs i386 vs i386:x86_64之间的区别

有人可以解释这三种架构之间的区别吗?

实际上当我在

Linux中构建一个64位应用程序时,我收到一个链接错误说:

skipping incompatible library.a when searching for library.a

然后我在该库上使用了objdump -f,得到了以下输出:

a.o: file format elf32-x86-64

architecture: i386:x64-32,flags 0x00000011:

HAS_RELOC,HAS_SYMS

start address 0x00000000

这是否意味着该库是32位?这是我收到链接器错误的原因吗?

403_14@

在标准的Intel兼容机器(非Itanium)上有3种常见的ABI可用.

>经典的32位体系结构,通常简称为“x86”,它具有像[3-6] 86-linux-gnu这样的三元组.寄存器和指针都是32位.

>最初来自AMD的64位扩展,通常简称为“amd64”,它具有x86_64-linux-gnu的GNU三元组.寄存器和指针都是64位.

>新的“x32”ABI,带有x86_64-linux-gnux32的三倍.寄存器是64位,但指针只有32位,在指针繁重的工作流程中节省了大量内存.它还确保所有其他64位处理器功能都可用.

上面的每一个都有它的系统调用接口,拥有ld.so,拥有完整的库集等.但是可以在同一个内核上运行所有3.

在Linux上,他们的加载器是:

% objdump -f /lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2

/lib/ld-linux.so.2: file format elf32-i386

architecture: i386,flags 0x00000150:

HAS_SYMS,DYNAMIC,D_PAGED

start address 0x00000a90

/lib64/ld-linux-x86-64.so.2: file format elf64-x86-64

architecture: i386:x86-64,D_PAGED

start address 0x0000000000000c90

/libx32/ld-linux-x32.so.2: file format elf32-x86-64

architecture: i386:x64-32,D_PAGED

start address 0x00000960

现在,如果您收到有关“跳过不兼容的库”的消息,这意味着某些内容与您的配置混乱.确保环境中没有错误的变量或在命令行上传递,或者在包管理器控件之外安装的文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值