以下は、私の問題を説明する例です。
ld -Lpath1 -Lpath2 -lA -lB -Xlinker -T -Xlinker \
-W1,-rpath,/usr/local/lib -l-o target
ld: cannot find -lA
collect2: ld returned 2 exit status
path1 と path2 は両方とも相対パスであり、ld の pwd に従ってライブラリ A を見つけることができるのに、なぜ ld はこのエラー メッセージを出力したのでしょうか?
この問題をデバッグするための提案を誰かに教えてもらえますか?
rt というライブラリの前に「-static」があります。
あなたの提案として、私はgccにldを駆動させてリンクプロセスを実行させようとしています。gcc Ao Bo -mabi=64 -static -lrt -Xlinker -T -Xlinker ld.script -W1,-rpath,/usr/local/lib -lmemdbg -o target 動作しません。
次に、「-static」オプションを削除し、-lpthread の後に別の動的ライブラリを削除します (rt は、「-static」を削除したときに検出される pthread に依存するため)
gcc Ao Bo -mabi=64 -lrt -lpthread -Xlinker -T -Xlinker ld.script -W1,-rpath,/usr/local/lib -lmemdbg -o target を実行すると、オブジェクトは正常にリンクされます。
そして、「-v」を gcc に渡して、「-static」コマンドが機能しない理由を理解しようとします。いくつかの「-L」オプションが表示され、検索リストに librt.a という名前のライブラリが見つかりました。
私は本当に混乱しました。gcc のバージョンは 4.3 です