如何找到Rustc --target = $ TARGET链接到哪个libc.so?

问题描述 投票:1回答:1

我想找到在Rust构建中使用的libc.so文件,以便我可以用--version查询它。 (某些libc通过C宏公开其版本信息,因此,它们的另一种选择是在构建脚本中使用cc条板箱。但是其他诸如musl则不使用。)

I can找出将与哪个二进制文件或库关联的libstd-*.so文件。当此libstd.sohost的libc链接时,在其上运行ldd将显示libc.so。但是,当主机系统使用glibc且目标环境是musl时,这将不起作用(“无效的ELF标头”)。我可以用ldd上的readelf -dobjdump -p代替libstd.so。但是这些仅显示其使用的libc.so文件的文件名称,而不显示其完整路径。而且libc.so不在LD_LIBRARY_PATH中的任何目录中。 (我确实知道它在我自己的系统上的位置,但是我试图以编程方式在任意系统上找到它。)

运行ldconfig -p仅向我提供有关主机系统的libc的信息。

如果有与gcc和clang的-print-file-name=libc.so等效的rustc,这样我可以做类似rustc --target=$TARGET --print-file-name=libc.so的事情。

关于如何获取此信息的其他想法?

rust libc musl
1个回答
0
投票

您可以像这样pass linker argumentsrustc

rustc -C link-args=...

要找出使用哪个libc.so,我相信以下命令就足够了:

rustc -C link-args=-Wl,-t ...

来自man ld

  -t
  --trace
       Print the names of the input files as ld processes them. ...
© www.soinside.com 2019 - 2024. All rights reserved.