Я работаю над проектом, в котором мне нужно использовать переменные локального хранилища потока (TLS) внутри DLL, но я не собираюсь экспортировать эти символы за пределы DLL.
Насколько мне известно, переменные thread_local нельзя экспортировать в DLL, по крайней мере, в MSVC. Мой вопрос заключается в том, возможно ли и безопасно ли использовать переменные локального хранилища потока внутри DLL, не экспортируя их в виде символов.





Локальные переменные потока можно использовать в DLL, если она использует привязку во время загрузки (то есть ссылку на заглушку .lib). Это не имеет никакого отношения к тому, экспортируется ли переменная или нет. Однако, если DLL загружается через LoadLibrary, вы должны использовать TLS API (TLSAlloc и т. д.), по крайней мере, до тех пор, пока любая библиотечная функция, использующая эти локальные переменные потока, будет вызываться в потоке, который уже существует на момент загрузки. Загрузка.
Это связано с тем, что область для переменных TLS для каждого потока выделяется во время создания потока, и если загружается новая библиотека DLL, эта область не увеличивается в соответствии с потребностями новой библиотеки DLL.
Вы пробовали
dumpbin /symbolsпроверить, действительно ли они экспортируются?