64位二进制是否支持32位静态库?如何检测其包含的32位静态库?
64位二进制是否支持32位静态库?
64位二进制程序无法兼容32位静态库。二者的指令集、内存寻址方式、基础数据类型长度(如指针、整数的位宽)完全不同,链接器在构建64位程序时会直接拒绝链接32位静态库,强行混合会导致链接失败,即使侥幸生成程序也无法正常运行。
缺少nm工具时,检测64位二进制是否包含32位静态库的方法
以下是几种Linux系统默认自带(或大概率预装)的工具方案:
使用
file命令:
分别对目标二进制和静态库执行命令:file <二进制文件名> file <静态库文件名>输出会明确标注文件的架构类型,比如64位二进制显示
ELF 64-bit LSB executable,32位静态库显示ELF 32-bit LSB archive。如果静态库是32位,64位二进制不可能包含它;若静态库是64位,则二者架构匹配。使用
readelf命令(仅适用于ELF格式文件):
查看二进制的架构类别:readelf -h <二进制文件名>找到
Class字段,64位程序会显示ELF64,32位则为ELF32。对静态库执行相同命令,对比两者的Class值即可判断是否兼容。使用
objdump命令(若系统预装):
执行命令查看二进制的架构信息:objdump -f <二进制文件名>输出中的
architecture字段会标注64位架构(如i386:x86-64),静态库的对应字段若为32位(如i386),则64位二进制不可能包含该静态库。
内容的提问来源于stack exchange,提问作者sundar
相关产品推荐
相关产品推荐

