.so 文件中的链接器脚本? (libc.so) 是这样吗?

.so 文件中的链接器脚本? (libc.so) 是这样吗?

我目前正在尝试让 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解释器的错误配置,或者看门狗模块中的无效假设。今天晚些时候我会看看后者;如果是前者,您最好在问题中链接的论坛上提问。

相关内容