当我研究 x86_64 Ubuntu 16.04 Pre-Built Binaries 的 Clang 时,我发现 libc++.so 不是真正共享库的软链接,它是一个带有文本的文本文件:
INPUT(libc++.so.1 -lc++abi)
因此 -lc++ 就等于链接到 libc++.so.1,然后链接到 libc++abi,我在任何一本 Linux 书中都没有看到这样的语法,也找不到任何有用的参考。我还尝试编写一个包含以下信息的 libhaha.so:
INPUT(-la -lb)
并看到 g++ main.cpp -lhaha 等于 g++ main.cpp -la -lb。看来这样的功能不只是clang才有的,它是Linux的通用功能。我想知道这个功能的语法是什么,以及是否有任何好的参考来谈论这个功能。这样的功能非常有用,因为我可以提供到一组共享库的软链接,而不仅仅是一个。
答案1
这是 GNU 链接器的一个功能ld
。尝试将非已知二进制格式的输入文件作为链接描述文件。
有关链接器脚本的文档可以在 ld 手册中找到(尝试info ld
);我还发现网络上的副本。