Скорее всего, название функции искажено *. Вам необходимо сделать следующее:
extern "C" response runPrediction(int obs, location* positions,
double* observations, int targets, location* targetPositions);
Что говорит о том, что он должен обрабатываться как объявление функции C.
* C ++ изменяет имена функций, чтобы дать им уникальные имена на этапе компоновки, для перегрузки функций. В C нет функции перегрузки, поэтому такой вещи нет.
Точно так же, как вы знаете, вы также можете сделать блок extern "C"
, если у вас есть несколько вещей, чтобы extern:
extern "C"
{
response runPrediction(int obs, location* positions,
double* observations, int targets, location* targetPositions);
// other stuff
}
И, как Пол предлагает, чтобы разрешить использование заголовка в обоих случаях, используйте __cplusplus
для его условия:
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C
#endif
EXTERN_C response runPrediction(int obs, location* positions,
double* observations, int targets, location* targetPositions);