【问题标题】:hidden symbol `stat' in libc_nonshared.a(stat.oS) is referenced by DSODSO 引用了 libc_nonshared.a(stat.oS) 中的隐藏符号“stat”
【发布时间】:2015-08-21 14:37:24
【问题描述】:

我正在尝试使用共享库 (libscplugin.so) 中包含的方法。

我已满足所有库要求:

  • libc.so 带有指向 libc.so.6 的符号链接
  • libz.so 带有指向 libz.so.1.2.8 的符号链接
  • libstdc++.so 带有指向 libstdc++.so.6.0.20 的符号链接

编译时我收到以下错误消息:

$ gcc test.c -o test -L/usr/lib/arm-linux-gnueabihf/ -lscplugin
/usr/bin/ld: test: hidden symbol `stat' in /usr/lib/arm-linux-gnueabihf/libc_nonshared.a(stat.oS) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

我能找到的对libc_nonshared.a 的唯一参考是/usr/lib/arm-linux-gnueabihf/libc.so

$ cat 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)
GROUP ( /lib/arm-linux-gnueabihf/libc.so.6 /usr/lib/arm-linux-gnueabihf/libc_nonshared.a  AS_NEEDED ( /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3 ) )

test.c 中,我试图使用共享库的两个函数(与stat 完全无关)。我该怎么做才能编译?

【问题讨论】:

    标签: c gcc ld gcc-warning


    【解决方案1】:

    你的问题在这里:

    我已满足所有库要求:

    • libc.so 带有指向 libc.so.6 的符号链接

    这不是 glibc 的有效设置。 libc.so 应该是您在答案末尾看到的文本文件(链接器脚本)。如果您自己为这样的共享库创建符号链接,那么您正在做一些奇怪且不必要的事情。使用提供的libc.so(您在构建其他共享库时需要这样做——您现在的问题是它们被错误链接),一切都会正常工作。

    【讨论】:

    • 删除符号链接会导致以下输出:“/usr/bin/ld: warning: libc.so, needed by /usr/lib/arm-linux-gnueabihf//libscplugin.so, not找到(尝试使用 -rpath 或 -rpath-link)”即使 /usr/lib/arm-linux-gnueabihf/libc.so 存在
    • 您能说明一下您的设置是什么吗?您是交叉编译还是使用主机系统的本机编译器?你用的是什么发行版?
    • 我在 Ubuntu 14.10 上(Linux feelinsonice-hrd 3.2.34-30 #17 SMP Mon Apr 13 15:53:45 UTC 2015 armv7l armv7l armv7l GNU/Linux),不是交叉编译。我使用的共享库是用于armeabi-v7a 平台的。
    • libscplugin.so 来自哪里?听起来好像链接不正确。
    • 它是从安卓应用中提取的
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 2012-07-27
    • 2023-01-31
    • 2018-08-18
    • 2014-07-04
    • 1970-01-01
    • 2014-06-02
    • 2019-07-04
    相关资源
    最近更新 更多