我使用yocto生成了我的rootfs,并发生了有线的事情,libc.so.6和libc.so so so so so rootfs(/usr/lib/lib/libc.so and/so and/so中lib/libc.so.6)。但是它们是不同的对象(不是链接到一个对象),这会导致我与yocto sdk的编译失败。
我知道我的libc。
任何人可以帮我吗?
libc.so
是链接脚本,一个看起来像这样的小文本文件(在此包装以可读性):
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP (
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc_nonshared.a
AS_NEEDED ( /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 )
)
它指示链接编辑器( ld
,在构建过程中链接时被调用,即不是动态链接器)以首先在libc.so.6
中查找符号,一个共享对象,然后在libc_nonshared.a
中,如果找不到它,最后在动态加载器ld-linux-x86-64.so.2
)。这用于实现某些功能,例如在较新版本的glibc,呼叫者启用函数 pthread_atfork
(必须从静态上链接,因此将其放置在libc_nonshared.a
而不是libc.so.6
中)。链接器脚本通常由gcc
或g++
命令隐式调用,但偶尔您会看到包含-lc
的命令行,然后访问libc.so
脚本(当动态链接时)。
链接脚本仅在构建时间使用。如果您的图像包含诸如libsqlite3-dev
之类的开发库,则有必要包括libc6-dev
(或称为提供libc.so
Linker脚本的包装的任何包装),因为libsqlite3-dev
不适合在没有Glibc的新程序和共享对象的情况下使用。