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

时间:2019-06-06 13:24:06

标签: c linux clang cross-compiling libc

花了将近一个小时的时间来过滤输出

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

  

将交叉编译器从zip文件提取到   目录,您必须使用--sysroot =。路径是根   解压缩文件的目录,Clang会寻找   目录bin(lib)包含在其中。

在哪里可以找到他们引用的zip文件?我对x86_64-linux-gnu目标感兴趣。

1 个答案:

答案 0 :(得分:2)

这将列出链接到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:]](.*)/\1/p' | grep --color=never libc.so

将键入路径,您显然可以将ldd之后的表达式替换为任何文件名。

从注释中可以看出,有一种直接使用clang的方法,尽管它会产生很多噪音,与ldd方法相比,它很难排除。

clang -Wl,--verbose hello_world.c

会告诉链接程序冗长,并且最终会告诉您为每个库尝试的所有库路径。