我在尝试用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