2

私は、単体テスト実行可能ファイルを作成した共有ライブラリを作成しています。テスト ルーチンを開始するターゲットを Makefile に作成したいと考えています。

単体テストの実行可能ファイルは、少し前に作成されたライブラリにリンクされています。

Makefile 内で実行可能ファイルを実行すると、

./starttest: error while loading shared libraries: libllist.so: cannot open shared object file: No such file or directory

この問題にアプローチするには、どちらの方法が適していますか?

  1. LD_LIBRARY_PATHこのように Makefile 内から定義しますか?

    export LD_LIBRARY_PATH=$(CURDIR)/lib

  2. テストを実行する前にユーザーにライブラリのインストールを強制しますか?

  3. Makefile から単体テストを開始しないでください。ユーザーが自分で実行します。

または多分私は何かを逃し、さらに良い方法がありますか?

4

1 に答える 1

4

メイクファイルを介して単体テストを呼び出すことだけが必要な場合は、オプション #1 を使用します。間違いなくオプション #2 は使用すべきではありません。オプション #3 もあまり好きではありません。

-rpath4 つ目の方法は、リンカー オプションを使用して単体テスト プログラムをビルドし、共有ライブラリの場所を単体テスト プログラムにエンコードすることです。たとえば、GCC を使用している場合、これは次のようになります-Wl,-rpath=$(CURDIR)。これにより、LD_LIBRARY_PATH などを設定する必要なく、コマンド ラインから単体テストを呼び出すことができます。

これは、最終的なバイナリ (ビルド ディレクトリをエンコードするため) には適していませんが、ビルド ディレクトリの外で使用しない単体テスト バイナリには問題ありません。

于 2013-07-14T18:30:42.960 に答える