使用 CLR 提升线程
Posted
技术标签:
【中文标题】使用 CLR 提升线程【英文标题】:Boost Threads with CLR 【发布时间】:2011-08-31 13:03:48 【问题描述】:使用 Visual Studio 2008 和 Boost Libraries 1.46.1 我想用 /CLR 标志编译和链接以下内容:
#include <boost/thread/thread.hpp>
void run()
int main(int argc, char *argv[])
boost::thread t(run);
第一个错误是关于 boost::thread 中前向声明的虚拟结构。 This post 通过声明来解决这个问题:
namespace boost
struct thread::dummy ;
当然,我现在可以编译了,但是我收到了链接器警告
警告 1 警告 LNK4248:'boost.detail.win32._SECURITY_ATTRIBUTES' 的未解析 typeref 令牌 (0100001F);图片可能无法运行
运行应用程序导致
应用程序无法正确启动 (0xc000007b)。
前面提到的论坛帖子中的任何建议都不适合我。我已经构建了 Boost Threads 库的静态版本,它在没有 /CLR 标志的情况下运行良好。调试/发布没有区别。我在Win7 32位下运行。
有什么提示吗?
【问题讨论】:
boost mutex C++/CLI problems的可能重复 @ildjarn:怎么样?这是一个链接器错误。链接的线程是运行时错误。 @Matt : "应用程序无法正确启动 (0xc000007b)。" 听起来像是运行时错误。 @ildjarn:你是对的。谁还需要阅读理解?我认为它们是重复的,链接器警告是红鲱鱼。 你试过在 DLL 中使用 boost 吗?我记得一些关于静态库中的非 clr 链接到 clr exe 是不可能的... 【参考方案1】:我已经遇到过这个问题,我不记得我从哪里得到的,但一种解决方法是在包含所有像这样的 boost 标头后声明“boost.detail.win32._SECURITY_ATTRIBUTES”。
namespace boost
namespace detail
namespace win32
struct _SECURITY_ATTRIBUTES: public ::_SECURITY_ATTRIBUTES ;
;
;
;
如果您希望所有人都能看到,请删除命名空间。
【讨论】:
宾果游戏!这是原帖lists.boost.org/threads-devel/2009/10/0502.php以上是关于使用 CLR 提升线程的主要内容,如果未能解决你的问题,请参考以下文章