8

CppUnit のようなパッケージを使用して C++ 単体テストをクロスコンパイルし、組み込みプラットフォームで実行したことのある人はいますか?

Linux ボックスで G++ を使用して、LynxOS ボードで実行する必要がある実行可能ファイルをコンパイルしています。単体テストを作成するものを構成および構築するための一般的な単体テストパッケージを入手できないようです。

CppUnit、UnitTest++、GTest、CppUTest などの多くの単体テスト パッケージを目にしますが、これらのパッケージをクロス コンパイラ シナリオで使用することはほとんどありません。「構成」スクリプトを使用したものは、これが可能であることを暗示していますが、それらを構成してビルドすることはできないようです。

4

6 に答える 6

3

クロス コンパイルされたコードを単体テストするときの私の慣行は、ネイティブ ツールチェーン (通常は x86 コンパイラのフレーバー) を使用して単体テスト自体をコンパイルすることです。これらの単体テストは、組み込みターゲットではなくビルド マシンで実行されます。スタブとモックを使用して厳密な単体テスト (統合テストではなく) を作成している場合は、組み込みハードウェアに依存するべきではありません。そうでない場合は、開始するのに遅すぎることはありません。

このアプローチの追加の利点の 1 つは、x86 以外の組み込みターゲットの場合、このタイプの単体テストは、エンディアンの問題、初期化されていない変数、およびその他の興味深いバグを洗い流すのに役立つことです。

于 2009-09-25T17:32:02.633 に答える
3
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux

sh4-linux は、プログラムを実行するプラットフォームです。

于 2011-08-26T03:38:27.047 に答える
1

私はここで答えを提供していませんが、ユニットテストを異なるターゲットで実行しないというアドバイスは受けません。できればシステムテストとユニットテストの両方を実行する必要があります。

そうしないと、ARM/その他の組み込み CPU のアライメント エラーなどの単純な問題が検出されません。

于 2010-03-17T00:39:27.110 に答える
0

OSとアーキテクチャ、および開発/ビルドマシンにあるもののために単体テストライブラリをコンパイルする必要があるようです。これにはBoost++ユニットテストフレームワークが好きです。アーキテクチャ用に事前に構築されたものをダウンロードすることもできますが、通常は自分でコンパイルする必要があります。ブーストをクロスコンパイルする方法をグーグルで調べて、いくつかの解決策を見つけました(例: http: //goodliffe.blogspot.com/2008/05/cross-compiling-boost.html)。CppUnitはクロスコンパイルする方が簡単かもしれませんが、試したことはありません。一般的な原則は同じです。開発アーキテクチャとターゲットマシンに対して同じライブラリバージョンをコンパイルします。

新しいターゲットのセットアップでは、ターゲットOS /archに必要なBoost++ライブラリをコンパイルしてから、Boost++ライブラリとテスト対象のコードの両方に対してリンクするテストを記述します。

利点は、x86 Linux Boost++ライブラリまたはターゲットBoost++ライブラリに対してリンクできるため、ターゲットと開発/ビルドマシンの両方でテストを実行できることです。

私の一般的な設定は次のようになります。

libs/boost/<arch>/<boost libs>
src/foo.{cpp,h}
tests/test_foo.cpp
build/foo
build/test_foo.<arch>

コンパイルされたBoost++ライブラリを、すべてのプロジェクトのlibs / dirに必要なさまざまなアーキテクチャの下に置き、Makefileでそれらのライブラリを参照します。ソースとテストは、コマンドを作成するように指定されたarch変数を使用してビルドされます。これにより、開発マシンでtest_foo.x86を実行し、ターゲットでtest_foo。{arm、mips、ppcなど}を実行できます。

于 2011-01-04T18:14:44.427 に答える