gpt4 book ai didi

c++ - dll + boost + VS2015 + WinXP ==崩溃

转载 作者:行者123 更新时间:2023-12-01 16:05:16 26 4
gpt4 key购买 nike

我正在编写要在 WinXP 上运行的 my.dll,它使用“vs2015”编译并使用“” boost 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(update 3) + boost_1.64.0_msvc14_32bit (预构建的 Windows 二进制文件) + 编译标志( "/MT/Zc:threadSafeInit-")

测试环境: 崩溃于:WinXP_sp3/Win2003_R2 运行良好:Win7+

最佳答案

最后,我找到了解决方案,只需添加 cxxflags="/Zc:threadSafeInit- " 即可构建 boost,请注意 '-' 后面有一个空格,否则可能会出现问题。

例如:

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

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

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

对于 cmake:

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

关于c++ - dll + boost + VS2015 + WinXP ==崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com