soファイルのINPUT構文は何ですか?

soファイルのINPUT構文は何ですか?

x86_64 Ubuntu 16.04プリビルドバイナリの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私も見つけました)。Webからコピー

関連情報