Qmakeを使用してUbuntu9.10で共有ライブラリを構築しています
この共有ライブラリ(A)は、別の共有ライブラリ(B)に依存しています。
プロジェクトBは正常にビルドされました。
プロジェクトAの.proファイルでは、私のLIBS変数は次のようになります。
LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0
(ライブラリのバージョンが異なるため、完全なshlib名を使用しました。)
いずれにせよ、プロジェクトAをビルドしようとすると、リンクの段階で壊れて、エラーメッセージが出力されます。
/usr/bin/ld: cannot find -llibdatelib_release.so.1.0.0
collect2: ld returned 1 exit status
make[1]: ***[bin/libprojecta_release.so.6.0.0] Error 1
make ***[release] Error 2
Exited with code 2
エラーメッセージから、ldがlibdatelibファイルを見つけることができないと文句を言っていると思ったので、手動で/ usr /lib/にコピーしました。
ただし、それでも問題は解決せず、同じエラーメッセージが表示されます。
誰もがこれを修正する方法を知っていますか?
[編集]
私はgccを使用してビルドするのはまったく新しいです。シンボリックリンクを作成する方法は知っていますが、lnkコマンドにどのパスを使用しますか?リンクしたいファイルは/home/ username / work / cppdev / datelib/binにあります。
また、私が使用しているビルドシステム(qmake)は、ビルドの一部としてシンボリックリンクを自動的に作成するため、/ home / username / work / cppdev / datelib/binフォルダーに次のファイルが既にあります。
- libdatelib_release.so(シンボリックリンク)
- libdatelib_release.so.1(シンボリックリンク)
- libdatelib_release.so.1.0(シンボリックリンク)
- libdatelib_release.so.1.0.0(共有ライブラリ)
シンボリックリンクが非常に多い理由(ポイントは何ですか?)と、共有ライブラリに直接リンクできないのにシンボリックリンクを経由する必要がある理由を説明するために、別の質問をする必要があるかもしれません。私はいくつかのオンラインドキュメントを読みましたが、これまでに見たものは、実際の技術的な理由ではなく、ディクタム/伝統のように見えます。Linuxでリンクするときにこのレベルの抽象化が必要な理由。