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

标签 gcc libc synology

我的最终目标是在带有 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

导致问题的库返回以下信息:

$ /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.so 处还有一个链接器脚本:

$ 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 更新之后)。

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

最佳答案

我也遇到了同样的问题。 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 系统上所期望的那样。

关于gcc - Synology DSM6 - libc.so.6 - 无法识别文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071951/

相关文章:

编译一个函数以在其他机器上运行它而不解决地址依赖性

c - 使用 ifort/icc 时未定义对 'main' 的引用

c - 当指针未指向正确的类型时,为什么 gcc 允许取消引用。为什么还要有类型?

c - 如何检查我是否正确实现了 C 库函数?

java - 找不到 Synology Scheduler .sh java 命令

ubuntu - Synology:如何在 Ubuntu 14.04 或 Mint 17 上安装 cloud Station 客户端

ubuntu - 在 anaconda 中安装包 gcc-7 时发生错误

visual-studio-code - 尝试从终端打开 vscode 时找不到版本 `GLIBC_2.33'

针对 glibc 的 Android 静态链接与动态链接

linux - 无法运行脚本