Voglio essere in grado di utilizzare Cmockery per simulare le funzioni C chiamate dal codice C++ che sto testando. Come un passo verso questo, ho rinominato l'esempio Cmockery run_tests.c a run_tests.cpp, e sto cercando di compilare e collegare con cmockery.c:Come posso compilare e collegare il codice C++ con il codice C compilato?
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
Le prime due righe di comando (per la compilazione) hanno successo , ma dopo l'ultimo ottengo:
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
Quel simbolo non definito è dalla linea 29 di run_tests.cpp:
return run_tests(tests);
I run_tests() funzione è definita in cmocker y.c.
Dopo aver letto "Linking C++ code with 'gcc' (without g++)", ho provato:
gcc -lstdc++ -m32 -o run_tests obj/run_tests.o obj/cmockery.o
ma ho ottenuto lo stesso risultato:
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
Come compilo e codice di collegamento C++ in modo che trova i simboli in codice C?
Nessuna delle risposte (al momento della scrittura di questo commento) chiarisce che non è necessario modificare cmockery.h. Posso inserire la dichiarazione "extern" C "' attorno a '#include' in run_tests.cpp. Accetterò la prima risposta per chiarire questo punto. –