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

Leo*_*Leo 12 boost c++-cli visual-studio-2010

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

所有库都是静态链接的,一切都编译得很好.执行C#应用程序会导致异常:"...不是有效的Win32应用程序.(HRESULT异常:0x800700C1)." 声称在某处遗漏了一些依赖.

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

编辑:在添加使用Boost库之前,它的DID工作

我该如何追踪问题?

Dmy*_*nko 1

这是已知问题。原因是 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 程序集链接。