目前,我正在使用我编写的较旧的静态库,并尝试添加功能以允许将其编译为 .dll(或 .so)。我已经完成并添加了一个宏:
#define DLLEXPORT
#ifdef SHARED
#ifdef COMPILING
#ifdef WIN32
#undef DLLEXPORT
#define DLLEXPORT __declspec(dllexport)
#endif
#else
#ifdef WIN32
#undef DLLEXPORT
#define DLLEXPORT __declspec(dllimport)
#endif
#endif
然后遍历并添加DLLEXPORT
到所有需要导出或导入的函数和类。
但我想知道这是否真的有必要?因为当我使用 cmake 编译项目add_library(LIB_NAME STATIC SRC_FILES)
并同时定义SHARED
andCOMPILING
时,它仍然设法使 MinGW Makefiles 成功编译为静态库。
所以我的问题是,这是否有任何标准保证?我浏览了所有我能找到的文档,包括使用 __declspec(dllexport) 从 DLL 导出和Microsoft 文档中的 __declspec() 关键字。但是我在哪里找不到它应该被忽略的地方。
目前一切正常,所以我主要是出于好奇而询问,但我也有点担心,如果这是未定义的行为,那么我应该现在修复它,以免以后更难诊断问题。