【发布时间】:2011-06-03 15:42:59
【问题描述】:
我希望能够使用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 代码中找到符号?
【问题讨论】:
-
没有一个答案(在撰写此评论时)清楚地表明我不需要修改 cmockery.h。我可以将
extern "C"声明放在run_tests.cpp 中的#include <cmockery.h>周围。我会接受第一个答案来说明这一点。
标签: c++ c gcc undefined-symbol cmockery