gpt4 book ai didi

c - 如何找出哪些文件与 "-lc"链接?

转载 作者:太空狗 更新时间:2023-10-29 12:08:48 24 4
gpt4 key购买 nike

在过滤输出将近一个小时之后

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:]](.*)/\1/p' | grep --color=never libc.so

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

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

clang -Wl,--verbose hello_world.c

将告诉链接器详细,它最终会告诉您为每个库尝试的所有库路径。

关于c - 如何找出哪些文件与 "-lc"链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com