3

テスト ファイルで UnitTest++ ライブラリを利用したいと思います。ただし、コンパイル時にライブラリを含めるのに苦労しています。だからここに私の現在のディレクトリ構造があります:

tests/
  UnitTests++/
    libUnitTest++.a
    src/
      UnitTests++.h
  unit/
    test.cpp

UnitTest++ 入門ガイドを使用して、ライブラリのセットアップを取得しましたここに test.cpp があります:

// test.cpp
#include <UnitTest++.h>

TEST(FailSpectacularly)
{
 CHECK(false);
}

int main()
{
 return UnitTest::RunAllTests();
}

そして、私は現在コンパイルしようとしています:

gcc -lUnitTest++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp

私は現在ld: symbol(s) not found、最後に大量の出力を取得しています。では、このプログラムのコンパイル時に UnitTest++ ライブラリを適切にインクルードするにはどうすればよいでしょうか? 私は Mac を使用していますが、Linux マシンを使用している人々がこれらの同じテストを簡単に実行できる方法があればいいのにと思います。

これで十分な情報が得られることを願っています。そうでない場合は、お知らせください。

4

4 に答える 4

1

私はそれを次のように構築することができました

gcc -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++ -lstdc++

また

g++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++

libstdc++に自動的にリンクします。


GCCドキュメントによると:

-llibrary

-lライブラリ

リンク時にlibraryという名前のライブラリを検索します。(ライブラリを個別の引数として使用する2番目の選択肢は、POSIX準拠のみであり、推奨されません。)

コマンドのどこにこのオプションを書くかによって違いが生じます。リンカは、指定された順序でライブラリとオブジェクトファイルを検索して処理します。

したがって、foo.o -lz bar.o' searches libraryファイルfoo.oの後、bar.oの前のz'。bar.oが`z'の関数を参照している場合、それらの関数はロードされない可能性があります。

これが、最初に-lUnitTest ++を指定し、次にtest.cppを指定したときにライブラリシンボルが見つからない理由だと思います。

于 2010-03-30T19:20:59.037 に答える
1

test.cpp をコンパイルして test.o を取得する

そして使う

g++ test.o libUnitTest++.a -o ./exectest

./exectest 実行可能ファイルを取得するには

libUnitTest++.a は、UnitTest++ のすべてのオブジェクト ファイルの単なるアーカイブです。すべてのオブジェクト ファイル (テスト オブジェクト ファイル + libUnitTest++.a) をリンクするだけです。

unittest++ に付属の makefile を編集して、自分のケースに適したものにしてみてください

于 2010-03-30T03:06:25.640 に答える
0

通常、-Lsomethingを必要とする-lsomethingの前に-Lsomethingを配置する必要があります。

于 2010-03-30T11:44:19.327 に答える
0

このメッセージld: symbol(s) not foundは、ライブラリがコンパイルされていないことを意味します。そのため、UnitTest++ フォルダーに移動し、コンパイルしてインストールする必要があります。

私は MAC で作業したことはありませんが、Linux では通常、ライブラリは次のようにコンパイルおよびインストールされます。

./configure
make
make install

投稿した UnitTest++ リンクでは、次のようにする必要があります。

make install

その後、OS のライブラリ フォルダーに UnitTest++.so ライブラリが作成されます。-lUnitTest++ コマンドを使用して、ライブラリをプログラムにリンクできるようになりました。

于 2010-03-30T02:59:36.510 に答える