我希望能够使用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
前两个命令行(编译)是成功的,但在最后一个命令行之后我收到了以下信息:
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文件中。
阅读完“Linking C++ code with 'gcc' (without 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代码中的符号?
#include <cmockery.h>
周围放置extern "C"
声明。我将接受第一个回答来澄清这一点。 - Daryl Spitzer