Cmockeryを使用して、テスト中の C++ コードから呼び出される C 関数をモックできるようにしたいと考えています。そのためのステップとして、Cmockery の例の名前をrun_tests.cから run_tests.cpp に変更し、コンパイルして cmockery.c とリンクしようとしています。
g++ -m32 -DHAVE_CONFIG_H -DPIC -I ../cmockery-0.1.2 -I /usr/include/malloc -c run_tests.cpp -o obj/run_tests.o
gcc -m32 -DHAVE_CONFIG_H -DPIC -Wno-format -I ../cmockery-0.1.2 -I /usr/include/malloc -c ../cmockery-0.1.2/cmockery.c -o obj/cmockery.o
g++ -m32 -o run_tests obj/run_tests.o obj/cmockery.o
最初の 2 つのコマンド ライン (コンパイル用) は成功していますが、最後のコマンド ラインの後は次のようになります。
Undefined symbols:
"_run_tests(UnitTest const*, unsigned long)", referenced from:
_main in run_tests.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
その未定義のシンボルは、run_tests.cpp の 29 行目からのものです。
return run_tests(tests);
run_tests() 関数は cmockery.c で定義されています。
「「gcc」を使用した C++ コードのリンク (g++ なし) 」を読んだ後、次のことを試しました。
gcc -lstdc++ -m32 -o run_tests obj/run_tests.o obj/cmockery.o
しかし、同じ結果を得ました:
Undefined symbols:
"_run_tests(UnitTest const*, unsigned long)", referenced from:
_main in run_tests.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
C++ コードをコンパイルおよびリンクして、C コード内のシンボルを検出するにはどうすればよいですか?