异常 HRESULT: 0x800700C1 执行使用 boost 引用本机 c++ lib 的 C# 应用程序时

2024-01-04

我正在运行一个引用 C++\CLI 包装器项目的 C# 应用程序,该项目又引用依赖于 Boost 1.47 库的本机 C++ 项目(链接到 ...vc100-mt-gd-1_47.lib 形式的文件)

所有库都是静态链接的,一切都编译得很好。执行 C# 应用程序会导致异常: “...不是有效的 Win32 应用程序。(HRESULT 异常:0x800700C1)。”声称某处缺少某种依赖性。

C# 应用程序配置为 x86 平台,而所有其他项目都是 Win32,包括 boost 的二进制文件。

编辑:在添加 Boost 库的使用之前,它确实有效

我怎样才能找到问题所在?


这是已知问题。原因是 Boost::Thread 中使用了线程本地存储 (TLS)。要修复此问题,您应该禁用 libboost_thread-vcXXX-mt-1_XX.lib 并强制链接器将 C++/CLI 程序集与 boost_thread-vcXXX-mt-1_XX.lib (boost_thread-vcXXX-mt-1_XX.dll 的存根)链接起来。

或者您可以创建自己的 DLL 并将其与 libboost_thread-vcXXX-mt-1_XX.lib 链接。然后您可以将 C++ DLL 与 C++/CLI 程序集链接。

See

  • 使用 /clr 编译时使用 boost 线程 https://stackoverflow.com/questions/4649960/using-boost-threads-when-compiling-with-clr
  • 使用 CLR 提升线程 https://stackoverflow.com/questions/6104200/boost-threads-with-clr
  • 在 CLR 中使用 boost https://stackoverflow.com/questions/19040273/using-boost-in-clr
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异常 HRESULT: 0x800700C1 执行使用 boost 引用本机 c++ lib 的 C# 应用程序时 的相关文章

随机推荐