我在尝试用PC-Lint检测使用了boost::thread库的代码时,总会报错:
# error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS"
这现这个错误是因为定义了“ BOOST_DISABLE_THREADS”。而我是没有定义此宏的,也就是说,这个宏是boost代码中在满足某个条件时自动被定义上的。那是哪里呢?通过分析,终于发现了这样几行代码:
// disable Win32 API's if compiler extentions are
// turned off:
//
#ifndef _MSC_EXTENSIONS
# define BOOST_DISABLE_WIN32
#endif
也就是 ,如果没有定义“_MSC_EXTENSIONS”宏,则boost就会自动定义上这个BOOST_DISABLE_WIN32宏。于是,尝试在.LNT文件中增加“ -d_MSC_EXTENSIONS”,此故障排除。
但继续测试,仍然会有另一个错误:
# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
原因是boost认为被测试的程序没有启动多线程支持。这时,只需要在.LNT文件中增加_MT宏的定义即可:
-d_MT。
总结一下,总之如果希望在PC-Lite中成功测试使用了Boost库的源代码,则应该在.LNT文件中增加以下两行宏定义妈可:
-d_MSC_EXTENSIONS
-d_MT
在使用PC-Lint测试包含boost::thread库的代码时,遇到错误提示“Threading support unavaliable...”。错误源于Boost在某些条件下自动定义了BOOST_DISABLE_THREADS宏。通过分析发现,当未定义_MSC_EXTENSIONS宏时,Boost会禁用Win32 API的多线程支持。为解决问题,在.LNT文件中添加“-d_MSC_EXTENSIONS”和“-d_MT”的宏定义,分别使Boost启用Win32 API和多线程支持,从而成功进行测试。
3032

被折叠的 条评论
为什么被折叠?



