2011-05-23 100 views
10

使用Visual Studio 2008和Boost庫1.46.1我要編譯和鏈接與/ CLR標誌如下:升壓線程與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:無法解析typeref令牌(0100001F)爲「boost.detail .win32._SECURITY_ATTRIBUTES';圖像可能無法運行

應用程序運行應用程序的結果無法正常啓動(0xc000007b)。

前面提到的論壇主題中的任何建議都不適用於我。我已經構建了一個靜態版本的Boost線程庫,並且它運行良好,沒有/ CLR標誌。調試/發佈沒有區別。我在Win7 32位下運行。

任何提示?

+1

可能重複[boost mutex C++/CLI problems](http://stackoverflow.com/q/5670248/636019) – ildjarn 2011-05-24 00:25:52

+0

@ildjarn:那是怎麼回事?這是一個鏈接器錯誤。鏈接的線程是運行時錯誤。 – 2011-06-05 17:31:19

+0

@Matt:「*應用程序無法正確啓動(0xc000007b)。*」聽起來像是一個運行時錯誤。 – ildjarn 2011-06-05 19:57:37

回答

3

我已經遇到了這個問題,我不記得我在哪裏得到了這個,但是一個解決方法是在包含所有的boost頭文件之後聲明「boost.detail.win32._SECURITY_ATTRIBUTES」。

namespace boost { 
    namespace detail { 
     namespace win32 { 
      struct _SECURITY_ATTRIBUTES: public ::_SECURITY_ATTRIBUTES {}; 
     }; 
    }; 
}; 

如果您希望所有人都看到它,請刪除命名空間。

+0

Bingo!這裏是原始線程http://lists.boost.org/threads-devel/2009/10/0502.php – namar0x0309 2011-11-23 17:00:50