so文件中INPUT的语法是什么

ken*_*ken 5 symlink shared-library

当我研究 x86_64 Ubuntu 16.04 Pre-Built Binaries 的 Clang 时,我看到 libc++.so 不是真正共享库的软链接,它是一个带有文本的文本文件:

INPUT(libc++.so.1 -lc++abi)
Run Code Online (Sandbox Code Playgroud)

所以 -lc++ 就等于链接到 libc++.so.1 然后链接到 libc++abi,我从来没有在我的任何 linux 书中看到这样的语法,也找不到任何有用的参考。我也尝试用信息写一个 libhaha.so:

INPUT(-la -lb)
Run Code Online (Sandbox Code Playgroud)

并看到 g++ main.cpp -lhaha 等于 g++ main.cpp -la -lb。似乎这样的功能不仅仅在clang中可用,它是一个通用的linux功能。我想知道这个特性的语法是什么,有没有什么好的参考可以讨论这个特性。这样的功能非常有用,因为我可以提供一组共享库的软链接,而不仅仅是一个。

der*_*ert 5

这是 GNU 链接器的一个功能ld。尝试将非已知二进制格式的输入文件作为链接描述文件。

有关链接器脚本的文档可以在 ld 手册中找到(尝试info ld);我还在网上找到了一份副本