没找到最终原因,只知道是应用代码使用TLS引起的。
我写了个简化代码去重试,在xp上能重现当dll使用了tls,如果用loadlibrary加载,访问tls时会Access violation。但没办法重现主程序中使用tls导致dll中std::atomic失效的问题。
不知道Qt DLL做了什么,不想再跟了。
目前可以通过SPDLOG_NO_TLS宏关掉spdlog里的tls,这样在xp下和Qt一起使用就没问题了。
但遗留的问题是应用代码包括引入的所有第三方库都不能用tls,这有点受不了。
比如像日志库,我了解的几个都有用tls优化,spdlog算好的,有开关可以直接关掉,其他几个根本没有选项可以关。
另一个我觉得比较彻底的办法,就是改Qt,让它不要用LoadLibrary运行时加载qwindows.dll,而是直接编译时链接好。也有缺点,就是Qt的插件机制可能就不能用了。
这个办法应该可行,但我没试过。
【 在 xieyf 的大作中提到: 】
: 后来找到原因了吗
:
--
修改:cn62 FROM 175.42.44.*
FROM 175.42.44.*