我目前正在尝试让 python 在我的 NAS(Zyxel NSA325)上运行。
我确实设法让 python 2.7 和 pip 运行,并且我能够使用 pip 成功安装看门狗模块。我跟着这些说明顺便说一句,让 python 和 pip 运行。
当我运行一个使用 watchdog 模块的 python 脚本时,我收到了一个非常严重的错误。
/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file
我用谷歌搜索了 ELF 文件的标头应该是什么样子显然它以 which 开头,7f 45 4c 46
翻译为.ELF
.所以我快速做了一下cat /ffp/lib/libc.so
,结果是:
/* GNU ld script
* Use the shared library, but some functions are only in
* the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
GROUP ( libc.so.0 uclibc_nonshared.a AS_NEEDED ( ld-uClibc.so.0 ) )
显然这不是 ELF 文件。所以我花了更多时间研究,我认为这是一个链接描述文件。
但现在我没有主意了。为什么 .so 文件中有链接描述文件?是对的吗?我该如何修复它?
系统信息:
# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux
答案1
当您看到名为 的文件时.so
,它不一定是共享库。这些文件在构建时(而不是运行时)链接程序时使用;它们通常是真正共享库的符号链接,但至少在使用 GNU 的系统上ld
它们也可以是链接器脚本,这完全没问题。如果您查看基于 glibc 的现代系统,您会发现libc.so
那里也有一个链接器脚本。
这并不能解释为什么Python(或看门狗模块)正在寻找libc.so
而不是libc.so.0
......它可能是Python解释器的错误配置,或者看门狗模块中的无效假设。今天晚些时候我会看看后者;如果是前者,您最好在问题中链接的论坛上提问。