DSO引用了libc_nonshared.a(stat.oS)中的隐藏符号`stat'

时间:2015-08-21 14:37:25

标签: c gcc ld gcc-warning

我正在尝试使用共享库中包含的方法(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完全无关)。我该怎么做才能编译?

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

  

我满足了所有图书馆的要求:

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

这不是glibc的有效设置。正如您在答案结尾处看到的那样,libc.so应该是一个文本文件(链接描述文件)。如果您正在自己创建符号链接到共享库,那么您正在做一些奇怪且不必要的事情。使用提供的libc.so(在构建其他共享库时需要执行此操作 - 您现在的问题是它们链接错误)并且一切正常。