tsortは,初期のUnixのバージョンのリンカで,アーカイブファイ ルを正確に一度だけ正しい順序で処理するために存在しています. ldはそれぞれのオブジェクトをアーカイブから読み出すので,プロ グラムで基本となるものが必要かどうか,リンク時に未定義のシンボルが定義 されているかどうかは明確です.
これは,アーカイブでの依存性を特別処理する必要があったことを意味します.
例えば,scanf
はおそらくread
を呼び出します.それは,一度
アーカイブ全体を見渡すとき,scanf.o
がread.o
の前に現れる
ことが重要だということで,そうでなければ,scanf
を呼び出している
が,read
を呼び出していないプログラムで,期待していない未解決の
read
への参照に結局なってしまうからです.
この問題を解決する方法は,最初にオブジェクトファイル内の依存性を生成す ることです.これは,lorderと呼ばれるシェルスクリプトで行なわ れていました.GNUツールは,私の知る限りlorderを用いるバージョンを提供 していませんが,BSDの配布物ではまだ見つかるはずです.
lorderの出力でtsortを実行すると,アーカイブに追加 したオブジェクトの定義順を並べ替えた結果を使用することが可能になります.
1980年以降,Unixのアーカイブにはシンボル表が含まれていて(伝統的に ranlibで構築され,今ではar自身で構築されます), Unixのリンカは,アーカイブファイル全体を何回も効率的に処理するため,そ のシンボル表を使用するので,この一連の処理は時代遅れです.
いずれにせよ,こういうことでtsortは生まれました.古い問題を 解決するためにリンカがアーカイブファイルを処理する方法で,それは別の方 法で解決されています.
終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.