У меня есть кроссплатформенный проект C ++, использующий переменную thread_local, и он будет предоставлен в dll. этот код хорошо работает в Linux GCC, но на платформе Windows vc2019 кажется, что я не могу использовать __declspec(dllexport)
и локальный поток вместе , Или он будет генерировать
[Ошибка компилятора C2492]
это от Microsoft
код - это простая глобальная переменная типа int:
extern thread_local int threadid;
наконец я получаю два вей:
сначала от 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