0

Cmockeryを使用した単体テストを、手作りの Makefile として使用する既存のビルド環境に追加する必要があります。したがって、cmockery.c を (automake なしで) ビルドする方法を理解する必要があります。

私が実行すると:

g++ -DHAVE_CONFIG_H -DPIC -I ../cmockery-0.1.2 -I /usr/include/malloc -c ../cmockery-0.1.2/cmockery.c -o obj/cmockery.o

次のようなエラーの長いリストが表示されます。

../cmockery-0.1.2/cmockery.c: In function ‘void initialize_source_location(SourceLocation*)’:
../cmockery-0.1.2/cmockery.c:248: error: cast from ‘SourceLocation*’ to ‘int’ loses precision

cmockery.c の 247:248 行目は次のとおりです。

static void initialize_source_location(SourceLocation * const location) {
    assert_true(location);

assert_truecmockery.h の 154 行目で定義されています。

#define assert_true(c) _assert_true((int)(c), #c, __FILE__, __LINE__)

したがって、(エラー状態として) 問題は、GCC が「SourceLocation*」から「int」へのキャストを好まないことです。

./configureand を使用してCmockery をビルドできますmake(最初に Linuxを使用した場合、Mac OS Xを使用した場合export CFLAGS=-I/usr/include/malloc)、エラーは発生しません。実行時に cmockery.c をコンパイルするコマンドラインを調べてみましたmake(後./configure):

 gcc -DHAVE_CONFIG_H -I. -I. -I./src -I./src -Isrc/google -I/usr/include/malloc -MT libcmockery_la-cmockery.lo -MD -MP -MF .deps/libcmockery_la-cmockery.Tpo -c src/cmockery.c  -fno-common -DPIC -o .libs/libcmockery_la-cmockery.o

...しかし、このエラーを回避するオプションはありません。

エラー: 'void*' から 'int' へのキャストで精度が失われました」では(int)、cmockery.h を(intptr_t). そして、私はそれが機能することを確認しました。しかし、Cmockery は./configureandmakeでビルドできるので、ソースを変更せずにビルドする方法が必要です。

4

1 に答える 1

2

gcc私のシステムで代わりに使用するとg++、私のシステム (Mandriva Linux 2010.1 64 ビット) でそのエラーが警告に変わり、コンパイルが完了します。

.
.
.
../cmockery-0.1.2/cmockery.c:248: warning: cast from pointer to integer of different size
.
.
.

ただし、比較的一般的なプラットフォーム (Linux 64 ビット/GCC など) で大量の警告が表示された場合、私は一般的に警戒していることを指摘する必要があると感じています。32 ビット オブジェクト ファイルへのコンパイルを強制するオプションを使用し-m32ても警告は生成されないため、そのまま使用されるソース コードは 64 ビット クリーンではない可能性があると推測できます。これは、autotools を使用するかどうかに関係なく発生します。

問題のプロジェクトを知らないので、問題ないかもしれませんが、いずれにせよ注意して使用してください...

編集:

cmockeryメーリングリストに対するOPの質問に対するこの回答によると、現在のリリースは現時点で64ビットクリーンではありません。エラー/警告には正当な理由があるようです...

于 2011-01-03T18:21:03.583 に答える