dll + boost + VS2015 + WinXP ==崩溃

时间:2017-05-15 08:09:45

标签: c++ boost dll visual-studio-2015 crash

我正在写 my.dll ,它将在 WinXP 上运行,它使用' vs2015 '编译并使用'提升1.64.0 32位预建库'。

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_TLSBOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION之类的编译标志用于禁用某些特定库的线程安全,但我没有看到任何可以为Boost.Thread执行此操作的标志。

有什么想法吗?

我的开发环境是:Win10 + VS2015(更新3)+ boost_1.64.0_msvc14_32bit(预建windows二进制)+编译标志(“/ MT / Zc:threadSafeInit-”)

测试环境:    崩溃:WinXP_sp3 / Win2003_R2    工作正常:Win7 +

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案,只需添加cxxflags="/Zc:threadSafeInit- "即可构建提升功能,请注意&#39; - &#39;之后的搜索空间,否则可能会导致问题。

例如:

G:\boost>b2 variant=debug link=static threading=multi runtime-link=shared cxxflags="/Zc:threadSafeInit- "

所有库都应使用此标志在VisualStudio中构建:

配置属性 - &gt; C / C ++ - &gt;命令行,添加/ Zc:threadSafeInit-

for cmake:

set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zc:threadSafeInit-")