"... Я пытался выяснить, есть ли способ связать их, чтобы я мог вызвать приемник из приложения рекордера."
Да - но проще Более прямой способ - скопировать код reciever.c
(без функции main()
) с кодом C ++. Для этого потребуется, чтобы в коде C
не было синтаксиса, который нарушал бы правила C++
. (Например, приведение к возврату malloc()
, например, требуется в C ++, но не рекомендуется в C.) Но поскольку большинство синтаксисов C полностью C++
совместимы, не должно быть никаких изменений или их не требуется. Теперь весь ваш код собран и может быть просто скомпилирован как C++
.
Однако подход к компоновке потребует компиляции всех функций вашей автономной программы (опять же, исключив функцию main()
в библиотеку. Например, DLL или общая библиотека Эту библиотеку можно связать с помощью заголовочного файла extern "C" { ... } within the
C ++, чтобы окружить прототипы функций C
, которые определены в файле библиотеки C
. Эти функции в окружении будут скомпилированы с использованием связи C
вместо C++
Краткий пример:
// 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();
// ...
}
Воспроизводится отсюда ...
Примечание, включенное в ссылку, это утверждение: "... В дополнение вам нужно прочитать оставшуюся часть этого раздела, чтобы узнать, как сделать так, чтобы ваши C функции вызывались на C ++ и / или ваши функции на C ++ вызывались на C. "
РЕДАКТИРОВАТЬ , чтобы добавить информацию из комментариев:
Относительно создания библиотеки. Затем библиотека может использоваться обеими программами и не поддерживаться в двух местах. Это может усложнить управление версиями, и в будущем могут возникнуть проблемы. s если две программы расходятся в будущем. Также обратите внимание, что возможно использование stati c вместо общей библиотеки. Эти подходы имеют различные значения версий, поскольку в будущем происходят изменения. (из @Avi Berger)
... Или, если вы хотите создать общий файл *. c, чтобы изменения, внесенные для одного приложения, легко включались в другое, вы не делаете библиотека, но просто ссылка в .o файле. (от @Goswin von Brederlow)