M1 Mac Parallels Ubuntu中ldd提示非动态可执行文件如何解决
问题根因
ldd返回not a dynamic executable的直接原因是二进制架构不匹配:
你在M1系列Mac上通过Parallels安装的是aarch64(ARM64)架构的Ubuntu系统,但你手中的libepanet.so从x86_64云主机的执行结果可以确认,是针对x86_64架构编译的共享库。ARM架构的系统动态链接器无法识别x86_64格式的ELF二进制头,自然会返回非可执行动态文件的报错。
排查验证步骤
在aarch64架构的Ubuntu虚拟机中,进入库存放目录执行以下命令确认架构:
file libepanet.so
如果输出内容包含x86-64字段、没有ARM aarch64相关标识,即可100%确认是架构不匹配问题,不要尝试强行安装x86_64版本的系统依赖库加载该文件,极易引发系统依赖损坏、段错误等问题。
修复方案
根据你的实际场景选以下方案即可:
- 优先选原生适配方案:直接获取aarch64架构编译的
libepanet.so替换现有文件。EPANET本身是开源项目,你可以直接在当前aarch64 Ubuntu环境下拉取对应版本源码本地编译,编译完成后重新执行ldd libepanet.so,确认所有依赖项无not found提示即可正常使用,稳定性和性能都是最优的。 - 无源码重编译可选虚拟机方案:如果你拿不到该库的源码、也找不到对应aarch64的预编译版本,可以直接在Parallels Desktop中新建x86_64架构的Ubuntu虚拟机——M系列芯片上的Parallels支持通过Rosetta 2转译运行x86_64架构Linux系统,转译性能足够运行常规模拟器类程序,不需要额外更换设备。
- 临时测试可选多架构转译方案:如果不想重装虚拟机,可以在现有aarch64系统中安装
qemu-user-static和x86_64多架构支持,通过用户态转译运行x86_64二进制。该方案性能损耗高、容易出现依赖冲突,仅适合临时调试使用,不推荐作为长期运行环境。
修复后校验
替换为对应架构的libepanet.so后,重新执行ldd命令,输出正常列出所有依赖库路径、无报错和缺失项时,即可正常启动模拟器程序。
内容的提问来源于stack exchange,提问作者Murat Göğebakan
相关产品推荐
相关产品推荐

