Cmockeryを使用して、C++コードから呼び出されたC関数を模擬したいと思っています。私はテストしています。その第一歩として、私はrun_tests.cppするCmockery例run_tests.cと改名しました、そしてコンパイルしcmockery.cとリンクしようとしています:C++コードをコンパイルして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本のコマンドラインは(コンパイルする)成功しています未定義のシンボルがrun_tests.cppのライン29からのものであることを
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
:
return run_tests(tests);
run_tests()関数はcmockerで定義されているが、私が得る最後の後y.c.
"Linking C++ code with 'gcc' (without g++)" を読んだ後、私が試した:
gcc -lstdc++ -m32 -o run_tests obj/run_tests.o obj/cmockery.o
をしかし、同じ結果だ:それはCコードでシンボルを見つけたので、私は++コードをコンパイルおよびリンクCはどうすればよい
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++コードが含まれ、あなたのヘッダファイルで
私はcmockery.hを変更する必要がないことを明確にしています(このコメントを書いている時点で)。 run_tests.cppの '#include'の周りに 'extern" C "宣言を置くことができます。私はこれを明確にする最初の答えを受け入れます。 –