导入错误:dlopen失败:ELF魔数错误

6 投票
1 回答
6347 浏览
提问于 2025-04-18 08:05

问题:

ImportError: dlopen failed: "/data/python/lib/python2.7/_io.so" has bad ELF magic

背景: 我正在处理一些内部的安卓应用程序(apk),这些应用程序支持Python解释器。我需要用这个apk来运行一些测试案例,这些测试案例通过adb推送到/sdcards/scripts/XXXX这个位置(也就是Python文件和包所在的地方)。现在在运行测试案例时,io模块被导入,这个模块会调用_io.so模块。但是,这个_io.so模块并不在apk自带的Python中。因此,我想也许可以在我的Mac上找到_io.so文件,然后通过adb推送到/data/python/lib/python2.7/lib-dynload这个位置,那里存放着其他的.so文件。我以为把_io.so文件推送到这个位置就能解决问题,但结果并没有。有没有人能告诉我发生了什么,以及根本原因是什么,这样我就能解决这个问题。

root@condor_umts:/data/python/lib/python2.7/lib-dynload # ls -l              
-rw------- root     root        53660 2014-05-30 12:12 _bisect.so
-rw------- root     root       180956 2014-05-30 12:12 _codecs_cn.so
-rw------- root     root       191196 2014-05-30 12:12 _codecs_hk.so
-rw------- root     root        81064 2014-05-30 12:12 _codecs_iso2022.so
-rw------- root     root       285092 2014-05-30 12:12 _codecs_jp.so
-rw------- root     root       175016 2014-05-30 12:12 _codecs_kr.so
-rw------- root     root       145036 2014-05-30 12:12 _codecs_tw.so
-rw------- root     root        96396 2014-05-30 12:12 _collections.so
-rw------- root     root        86588 2014-05-30 12:12 _csv.so

为了简洁起见省略了一部分内容 环境:

Python 2.7.3 (default, Apr 15 2014, 13:44:15) 
[GCC 4.6 20120106 (prerelease)] on linux-armv7l

1 个回答

2

你不能把在Mac上用x86架构编译的.so文件直接用在安卓上(安卓支持的是linux-arm架构)。

撰写回答