我目前正在尝试让python在我的NAS上运行,这是一个Zyxel NSA325.
我确实设法让python 2.7和pip运行,我能够用pip成功安装看门狗模块.我跟着these instructions得到python和pip运行btw.
当我运行一个使用看门狗模块的python脚本时,我得到一个堰错误,很难.
/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file
我用谷歌搜索了ELF文件的标题应该是什么样的,而apparently则以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文件.所以我花了一些时间研究,我认为它是linker script.
但是现在我没有想法了.为什么.so文件中有链接描述文件?是对的吗?我该如何解决?
系统信息:
# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux
解决方法:
当您看到名为.so的文件时,它不一定是共享库.在构建时链接程序时使用这些文件,而不是运行时;它们通常是真正的共享库的符号链接,但至少在使用GNU ld的系统上,它们也可以是链接器脚本,这完全没问题.如果你看一个现代的基于glibc的系统,你会发现libc.so也是一个链接器脚本.
这并不能解释为什么Python(或看门狗模块)正在寻找libc.so而不是libc.so.0 …它可能是Python解释器的错误配置,或者看门狗模块中的无效假设.我今天晚些时候会看看后者;如果它是前者,你最好在你的问题中询问你所链接的论坛.