0

目前,我正在使用我编写的较旧的静态库,并尝试添加功能以允许将其编译为 .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)并同时定义SHAREDandCOMPILING时,它仍然设法使 MinGW Makefiles 成功编译为静态库。

所以我的问题是,这是否有任何标准保证?我浏览了所有我能找到的文档,包括使用 __declspec(dllexport) 从 DLL 导出和Microsoft 文档中的 __declspec() 关键字。但是我在哪里找不到它应该被忽略的地方。

目前一切正常,所以我主要是出于好奇而询问,但我也有点担心,如果这是未定义的行为,那么我应该现在修复它,以免以后更难诊断问题。

4

0 回答 0