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

For*_*vin 10 linux arm python linker elf

我目前正在尝试让 python 在我的 NAS 上运行,这是一个 Zyxel NSA325。

我确实设法让 python 2.7 和 pip 运行,并且我能够使用 pip 成功安装看门狗模块。我按照这些说明让 python 和 pip 运行 btw。

当我运行一个使用 watchdog 模块的 python 脚本时,我得到了一个非常错误的错误,很难。

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了 ELF 文件的标题应该是什么样子,显然它以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 ) )
Run Code Online (Sandbox Code Playgroud)

显然,这不是 ELF 文件。所以我花了更多的时间研究,我认为它是一个链接器脚本

但现在我没有想法了。为什么 .so 文件中有链接描述文件?那正确吗?我该如何解决?

系统信息:

# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 12

当您看到名为 的文件时.so,它不一定是共享库。这些文件用于在构建时而不是运行时链接程序;它们通常是真正共享库的符号链接,但至少在使用 GNU 的系统上,ld它们也可以是链接器脚本,这完全没问题。如果您查看基于 glibc 的现代系统,您会发现libc.so那里也有一个链接器脚本。

这并不能解释为什么 Python(或看门狗模块)正在寻找libc.so而不是libc.so.0......这可能是 Python 解释器的错误配置,或者看门狗模块中的无效假设。今天晚些时候我会看看后者;如果是前者,您最好在问题中链接到的论坛上提问。