Я создаю программы с использованием C. Однако мне нужно использовать множество библиотек, которые имеют API только для С++. Итак, возможно ли, что я могу создать общий объект на С++, а затем получить доступ к его функциям с помощью C?
- Единственными данными, которые я бы передавал и возвращал, были бы типы данных, совместимые с C.
- Преобразование или переход на cpp здесь не является вариантом.
Если невозможно связать эти коды, как мне получить информацию из кода С++ в код C?
Я попытался вызвать функции С++ из C, но я получаю ошибки во время связывания, когда включаю <string>
. Поэтому, когда я вызываю функции С++ из C, должен ли я использовать только этот код, который будет совместим с компилятором C?
Заголовок С++ cppfile.hpp
#ifndef CPPFILE_H
#define CPPFILE_H
#ifdef __cplusplus
extern "C" {
#endif
extern int myfunction(const char *filename);
#ifdef __cplusplus
}
#endif
#endif
Файл С++ cppfile.cpp
#include "cppfile.hpp"
#include <string>
int myfunction(const char *filename) {
String S(filename);
return 0;
}
C файл cmain.c
#include "cppfile.hpp"
int main(int argc, char **argv)
{
int i = myfunction(argv[1]);
printf("%d\n", i);
return 0;
}
Компиляция:
gcc -c cmain.c
g++ -fPIC -shared -o cppfile.so cppfile.cpp