Synology DSM6 - libc.so.6 - 无法识别文件格式

Synology DSM6 - libc.so.6 - File format not recognized

我的最终目标是在装有 DSM 6.0.1-7393 Update 1 的 Synology DiskStation DS1813+ 上安装 Nagios。但我什至无法开始编译软件包...

当我尝试在我的 Synology DiskStation 上使用 gcc 时,我总是收到以下错误信息:

$ gcc hello.c -o hello.o
/lib/libc.so.6: file not recognized: File format not recognized
collect2: ld returned 1 exit status

这是我的 shell 环境。我尝试过使用不同的 LD_LIBRARY_PATH 设置,但即使省略它也没有什么不同。

$ env
TERM=xterm-256color
SHELL=/bin/sh
SSH_CLIENT=192.168.2.110 51079 22
OLDPWD=/var/services/homes/egi
SSH_TTY=/dev/pts/7
LC_ALL=en_US.utf8
USER=egi
LD_LIBRARY_PATH=/opt/lib:
PAGER=more
MAIL=/var/mail/egi
PATH=/opt/sbin:/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
PWD=/var/services/homes/egi/exer
LANG=en_US.utf8
PS1=[\u@\h \W]$ 
SHLVL=1
HOME=/var/services/homes/egi
TERMINFO=/usr/share/terminfo
LOGNAME=shunyam
SSH_CONNECTION=xxx.xxx.xxx.xxx 51079 yyy.yyy.yyy.yyy 22
PGDATA=/var/services/pgsql
CC=gcc
_=/opt/bin/env

编译器已安装 ipkg,其规格如下所示:

$ gcc --verbose
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../gcc-4.2.1/configure --build=i386-pc-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu --prefix=/opt --disable-nls --disable-static --with-as=/home/slug/optware/syno-i686/toolchain/gcc-4.2.1-glibc-2.3.6/i686-linux-gnu/bin/i686-linux-gnu-as --with-ld=/home/slug/optware/syno-i686/toolchain/gcc-4.2.1-glibc-2.3.6/i686-linux-gnu/bin/i686-linux-gnu-ld --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.2.1

导致问题的库returns这个信息:

$ /lib/libc.so.6 
GNU C Library (crosstool-NG 1.20.0) stable release version 2.20-2014.11, by Roland McGrath et al.
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.9.3 20150311 (prerelease).
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

在/opt/lib/libc处也有一个链接描述文件。所以:

$ cat /opt/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-i386)
GROUP ( /lib/libc.so.6 /opt/lib/libc_nonshared.a )

图书馆真的不能坏,否则什么都行不通

gcc 外,所有其他必需的软件包也已通过 ipkg.

安装

奇怪的是,我似乎是唯一遇到这个问题的人,因为我在 Google 上没有找到相关帖子。 Synology 的支持告诉我他们不支持安装命令行软件包。

大约两年前,当我第一次在此 Diskstation 上安装 gcc 时,一切正常。我几个月前就注意到了这个问题(可能是在 DSM 更新之后)。

有没有人也遇到过这个问题或知道如何让它再次工作?谢谢!

看来我一直在使用其他 g++:

/volume1/homes/user/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-g++

它来自这个文件:gcc473_glibc217_x86_64_cedarview-GPL.tgz

其他人也遇到 DSM 6 的问题:https://forum.synology.com/enu/viewtopic.php?t=116803 建议改用 SynoCommunity 的 Debian Chroot 软件包。

我遇到了完全相同的问题。 GCC 曾经可以工作,现在使用 DSM 6.1 它坏了。我认为是在他们使用 DSM 6.0 切换到 64 位之后我相信。你的问题实际上给了我答案所以我想在这里分享。我在文件 /opt/lib/libc.so.

中将 /lib/libc.so.6 更改为 /lib32/libc.so.6
$ cat /opt/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-i386)
GROUP ( /lib32/libc.so.6 /opt/lib/libc_nonshared.a )

在进行上述更改后,optware GCC 编译了我的测试文件,没有设置任何环境变量,就像您在普通 Linux 系统上所期望的那样。

您只需像这样通过 lib32 更改 lib: 猫 /opt/lib/libc.so /* GNU ld 脚本 使用共享库,但有些功能只在 静态库,所以再尝试一下。 */ OUTPUT_FORMAT(elf32-i386) 组 ( /lib32/libc.so.6 /opt/lib/libc_nonshared.a )