gcc (GCC) 4.7.2
Hello,
I am creating a shared library that will compile on linux and a dll that will compile on windows using the same source code. So i am creating an portable library for both linux and windows.
In my header file for the library is this 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
In the source I have the following i.e. module.c
#include "module.h"
LIB_INTERFACE(int) module_init()
{
/* do something useful
return 0;
}
And in my test application that will link and use this module.so I have this:
#include "module.h"
int main(void)
{
if(module_init() != 0) {
return -1;
}
return 0;
}
1) Is what I have done above is it a correct implementation of creating a portable library for linux and windows?
2) I am just wondering as I have wrapped the functions in extern "C"
so that this library can been called from a program that has been compiled in C++. Do I still need this EXTERN_C
in the following:
#define LIB_INTERFACE(type) EXTERN_C __declspec(dllexport) type
3) What is the purpose of the EXTERN_C
?
Many thanks in advance,