我写my.dll这对的WinXP运行,它与 'vs2015' 和使用“升压1.64.0 32位预建库编译'。DLL +升压+ VS2015 + WinXP的==崩溃
这里只有一个my.dll行代码:
#include <boost/thread/shared_mutex.hpp>
尝试通过在WinXP REGSVR32加载(REGSVR32调用LoadLibrary):
regsvr32 my.dll
它加载失败,从windbg我看到有一个访问冲突 - 代码c0000005
我试过旧版本1.63,同样的问题。我想这与vs2015的魔术静态有关,试图添加编译标志“/ Zc:threadSafeInit-”来禁用它,但仍然没有运气。
似乎有编译标志像BOOST_LOG_USE_COMPILER_TLS
,BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION
禁用线程安全的某些特定的库,但我没有看到任何标志,可以做到这一点Boost.Thread。
任何想法?
我开发环境是:Win10 + VS2015(更新3)+ boost_1.64.0_msvc14_32bit(预建窗口二进制)+编译标志( “/ MT/ZC:threadSafeInit-”)
测试环境: 崩溃于:WinXP_sp3/Win2003_R2 上正常工作:最后的Win7 +
'regsvr32'是**不**魔 “让我的DLL工作” 开关。如果你不知道它做了什么,你为什么使用它?这是货运崇拜节目。 'regsvr32'预计它的参数是一个既有_needs_又有_supports_注册的DLL。传递随机DLL会导致崩溃。不要责怪'regsvr32'或DLL上的崩溃,崩溃是由您的命令行引起的。 – MSalters
@MSalter,我没有解释清楚,我不指望'regsvr32'解决这个问题。我只需要一个loader.exe加载my.dll,'regsvr32'首先调用'LoadLibrary',这样它就可以用来测试my.dll。如果我用vs2015自己写一个loader.exe,崩溃就不会发生,因为exe首先初始化'tls'环境。 – aj3423