Вам необходимо создать один заголовочный файл, который включается модулями в библиотеки C и C ++:
#ifndef YOURSTRUCT_H
#define YOURSTRUCT_H
#ifdef __cplusplus
extern "C" {
#endif
struct YourStruct
{
// your contents here
};
#ifdef __cplusplus
}
#endif
// UPDATE: declare an instance here:
extern YourStruct yourInstance;
#endif
Эта форма файла заголовка означает, что оба компилятора будут рады читать файл заголовка, и оба будут производить одно и то же искажение имени.
Обновление:
Тогда вам нужен файл модуля. Только один. Либо файл C, если он должен быть включен в вашу библиотеку C, либо файл C ++, если он должен быть включен в вашу библиотеку c ++:
#include "yourstruct.h"
YourStruct yourInstance;
Теперь любой клиент глобального экземпляра, будь то клиент C или клиент C ++, должен просто #include "yourstruct.h"
и ссылку yourInstance
Обновление:
Как указывает Матье, вам лучше передавать указатели на примеры вокруг. например.
#include "yourstruct.h"
#ifdef __cplusplus
extern "C" {
#endif
void yourFunction(YourStruct* someInstance);
#ifdef __cplusplus
}
#endif