gcc (GCC) 4.7.2
Здравствуйте,
Я создаю общую библиотеку, которая будет компилироваться на linux и dll, которая будет компилироваться в Windows с использованием того же исходного кода. Поэтому я создаю портативную библиотеку для Linux и Windows.
В моем файле заголовка для библиотеки это i.e. module.h
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN32
#define LIB_INTERFACE(type) EXTERN_C __declspec(dllexport) type
#else
#define LIB_INTERFACE(type) type
#endif
LIB_INTERFACE(int) module_init();
#ifdef __cplusplus
}
#endif
В источнике у меня есть следующий i.e. module.c
#include "module.h"
LIB_INTERFACE(int) module_init()
{
/* do something useful
return 0;
}
И в моем тестовом приложении, которое будет связывать и использовать этот модуль .so у меня есть это:
#include "module.h"
int main(void)
{
if(module_init() != 0) {
return -1;
}
return 0;
}
1) Является ли то, что я сделал выше, это правильная реализация создания переносимой библиотеки для linux и windows?
2) Мне просто интересно, как я завернул функции в extern "C"
, чтобы эта библиотека могла быть вызвана из программы, которая была скомпилирована в С++. Мне все еще нужен этот EXTERN_C
в следующем:
#define LIB_INTERFACE(type) EXTERN_C __declspec(dllexport) type
3) Какова цель EXTERN_C
?
Большое спасибо заранее,