Я хочу использовать некоторые части кода C в ROS, который использует язык C ++

как говорится в заголовке, я пытаюсь использовать некоторый код C в файле .cpp, который я хочу использовать в пакете ROS.
Вот код, который я написал сейчас:

#include "ros/ros.h"#include "std_msgs/String.h"#include "../include/heart_rate_monitor/wfdb.h"#include <stdio.h>
#include <sstream>int main(int argc, char **argv)
{
ros::init(argc, argv, "heart");
ros::NodeHandle n;

int i;
WFDB_Sample v[2];
WFDB_Siginfo s[2];

if (isigopen("100s", s, 2) < 2)
exit(1);

for (i = 0; i < 10; i++) {
if (getvec(v) < 0)
break;
printf("%d\t%d\n", v[0], v[1]);

}
exit(0);
return 0;
}

Когда я пытаюсь использовать catkin_make, я вижу в терминале некоторые ошибки, такие как

"heart.cpp:(.text+0xf4): reference not defined on "isigopen".

Очевидно, что система не может видеть библиотеку C wfdb.h, хотя она находится в папке include пакета.
Может быть, я должен использовать такой код, как #ifdef __cplusplus а также extern C или что-то?

Если это так, я действительно не знаю, как его использовать, так как я супер нуб в коде!
Есть ли что-то еще, что я не учел?

Заранее спасибо!

Marco

0

Решение

Вы должны посмотреть здесь, чтобы получить больше информации о смешивании кода:
https://isocpp.org/wiki/faq/mixing-c-and-cpp

   // C++ code
extern "C" void f(int); // one way
extern "C" {    // another way
int g(double);
double h();
};
void code(int i, double d)
{
f(i);
int ii = g(d);
double dd = h();
// ...
}
1

Другие решения

Это звучит как проблема компоновщика, а не проблема компилятора. Вы включили .lib в свою линию компоновщика?

-1