【发布时间】:2019-10-22 00:45:25
【问题描述】:
花了将近一个小时来过滤输出
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 目标感兴趣。
【问题讨论】:
-
这个问题的答案取决于你为什么想知道;请解释您的更大目标。另外,我强烈怀疑您从链接命令中删除了太多内容。
-
@zwol 我需要知道使用了哪些文件,以便将它们复制到另一个系统进行交叉编译。此命令成功交叉编译 hello world。
-
@Alex,交叉编译的常用方法包括安装和使用交叉编译工具链,其中包括适当的跨 C 标准库的实现。你不应该做任何你描述的事情。
-
@Alex 这对于 hello world 来说可能已经足够了,但是为了编译任意程序,您肯定至少还需要
libgcc.a和libgcc_s.so(是的,这些库在它们的名称,但 clang 编译的代码可能仍需要它们),并且您可能还需要crtbegin.o和crtend.o(我不记得它们是否仍然有意义)。 -
@Alex ... 我也正要说 John Bollinger 刚才所说的话。
标签: c linux clang cross-compiling libc