我正在尝试使用共享库中包含的方法(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
完全无关)。我该怎么做才能编译?
答案 0 :(得分:0)
你的问题在这里:
我满足了所有图书馆的要求:
- 的符号链接
libc.so
带有libc.so.6
这不是glibc的有效设置。正如您在答案结尾处看到的那样,libc.so
应该是一个文本文件(链接描述文件)。如果您正在自己创建符号链接到共享库,那么您正在做一些奇怪且不必要的事情。使用提供的libc.so
(在构建其他共享库时需要执行此操作 - 您现在的问题是它们链接错误)并且一切正常。