From: Vincent T. <vt...@un...> - 2008-10-30 07:21:30
|
On Wed, 29 Oct 2008, Greg Chicares wrote: > On 2008-10-29 17:29Z, Vincent Torri wrote: >> >> On Wed, 29 Oct 2008, wrote: >> >>>> 1) if I build Lib1: >>>> a) if i build the DLL, EAPI is defined to __declspec(dllexport) >>>> a) If I build the static lib, EAPI is defined to nothing. >>>> 2) if I do not build Lib1, EAPI is defined to __declspec(dllimport) >>> >>>> Hence, if in Lib2, I include that main header file of Lib1, all the >>>> declaration of Lib1 functions will have __declspec(dllimport) >>>> >>>> is it correct ? >>> >>> If Lib1 is built as a static library, then probably not. >> >> and what should I do, then ? > > Use a more complex conditional that defines your API macro > to be empty when you're building or using a static library. > Here's mine: > > http://cvs.savannah.gnu.org/viewvc/lmi/lmi/so_attributes.hpp?view=annotate > > Or just don't ever use any dll attribute, and always link > dlls directly. so doing something like that: 1) if I build Lib1: a) if i build the DLL, EAPI is defined to __declspec(dllexport) b) if I build the static lib, EAPI is defined to nothing. 2) if I do not build Lib1 (i'm currently building another lib, say, Lib2): a) if I build the DLL of Lib2, EAPI is defined to __declspec(dllimport) b) if I build the static lib of Lib2, EAPI is defined to nothing. that is: #ifdef _WIN32 # ifdef EFL_EVIL_BUILD # ifdef DLL_EXPORT # define EAPI __declspec(dllexport) # else # define EAPI # endif /* ! DLL_EXPORT */ # else # ifdef DLL_EXPORT # define EAPI __declspec(dllimport) # else # define EAPI # endif /* ! DLL_EXPORT */ # endif /* ! EFL_EVIL_BUILD */ #endif /* _WIN32 */ ? if so, it can be factorized to: #ifdef _WIN32 # ifdef DLL_EXPORT # ifdef EFL_EVIL_BUILD # define EAPI __declspec(dllexport) # else # define EAPI __declspec(dllimport) # endif # else # #define EAPI # endif #endif ? Vincent Torri |