如何找出哪些文件正在与“-lc”链接?

How to find out which files are being linked with "-lc"?

的过滤输出上花费了将近一个小时之后
clang -v hello_world.c

我得到以下链接命令:

ld -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 \
/usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o \
hello_world.o /usr/lib/x86_64-linux-gnu/libc.so \
/usr/lib/x86_64-linux-gnu/crtn.o

是否有更简单的方法来确定 -lc 将扩展为 /usr/lib/x86_64-linux-gnu/libc.so

我需要知道使用了哪些文件,以便将它们复制到另一个系统进行交叉编译。

编辑

看来我应该使用交叉编译工具链。来自 clang 文档:

https://clang.llvm.org/docs/CrossCompilation.html

When you have extracted your cross-compiler from a zip file into a directory, you have to use --sysroot=. The path is the root directory where you have unpacked your file, and Clang will look for the directories bin, lib, include in there.

我从哪里可以获得他们提到的那个 zip 文件?我对 x86_64-linux-gnu 目标感兴趣。

这将列出所有链接到 libc.so.6:

的文件
for i in `find . -type f -executable`
do
    j=$(ldd $i | grep libc.so.6 | wc -l)
    if [ $j -gt 0 ]
    then
        echo $i
    fi
done

如果您想找出 libc.so.6 的路径,请在原始问题中说明类似于:

ldd `which ld` | sed 's/^[[:space:]]libc.so.6[[:space:]]=>[[:space:]]\(.*\)[[:space:]](.*)//p' | grep --color=never libc.so

会键入路径,显然你可以用任何文件名替换ldd后面的表达式。

根据评论,有一种直接用clang的方法,虽然会产生很多噪音,与ldd方法相比,很难排除。

clang -Wl,--verbose hello_world.c

会让链接器变得冗长,它最终会告诉你为每个库尝试过的所有库路径。