我有一个使用thread_local变量的跨平台C ++项目,它将在dll中提供。此代码在linux gcc上工作良好,但在Windows vc2019平台上,看来我无法使用__declspec(dllexport)
和local local在一起,否则它将生成
[编译器错误C2492]
这是来自Microsoft
code是一个简单的全局int变量:
extern thread_local int threadid;
最后我得到了两个wey:
首先从microsoft开始,这有点复杂。
第二,不要在头文件中声明thread_local变量,而使用get函数来访问它,就像这样:
#ifdef OS_WIN
DLL_EXPORT int getThreadId();
DLL_EXPORT threadLocalWrap& getThreadLocalWrap();
#else
extern thread_local int threadid;
extern thread_local threadLocalWrap _threadLocalWrap;
#define getThreadId() threadid
#define getThreadLocalWrap() _threadLocalWrap
#endif