我想找到在Rust构建中使用的libc.so文件,以便我可以用--version
查询它。 (某些libc通过C宏公开其版本信息,因此,它们的另一种选择是在构建脚本中使用cc
条板箱。但是其他诸如musl则不使用。)
I can找出将与哪个二进制文件或库关联的libstd-*.so
文件。当此libstd.so
与host的libc链接时,在其上运行ldd
将显示libc.so
。但是,当主机系统使用glibc且目标环境是musl时,这将不起作用(“无效的ELF标头”)。我可以用ldd
上的readelf -d
或objdump -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
的事情。
关于如何获取此信息的其他想法?
您可以像这样pass linker arguments至rustc
:
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. ...