Tôi muốn có thể sử dụng Cmockery để giả lập các hàm C được gọi từ mã C++ mà tôi đang thử nghiệm. Là một bước về phía đó, tôi đã đổi tên ví dụ Cmockery run_tests.c để run_tests.cpp, và đang cố gắng để biên dịch và liên kết nó với cmockery.c:Làm cách nào để biên dịch và liên kết mã C++ với mã C đã biên dịch?
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
Hai dòng lệnh đầu tiên (để biên dịch) thành công , nhưng sau khi người cuối cùng tôi nhận đượ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
Đó biểu tượng không xác định là từ dòng 29 của run_tests.cpp:
return run_tests(tests);
các run_tests() chức năng được định nghĩa trong cmocker y C.
Sau khi đọc "Linking C++ code with 'gcc' (without g++)", tôi đã cố gắng:
gcc -lstdc++ -m32 -o run_tests obj/run_tests.o obj/cmockery.o
Nhưng có kết quả tương tự:
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
Làm thế nào để biên dịch và liên kết C++ code để nó tìm thấy những biểu tượng trong mã C?
Không có câu trả lời nào (tại thời điểm viết nhận xét này) làm rõ rằng tôi không cần sửa đổi cmockery.h. Tôi có thể đặt 'extern" C "' khai báo xung quanh '#include' trong run_tests.cpp. Tôi sẽ chấp nhận câu trả lời đầu tiên để làm rõ điều này. –