花了将近一个小时的时间来过滤输出
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
目标感兴趣。
答案 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
会告诉链接程序冗长,并且最终会告诉您为每个库尝试的所有库路径。