boost test 动态库使用问题

Learning_C 2010-03-11 09:43:49
boost test库版本:1.40.0
开发工具: vs2008
附加包含目录为:
E:\******\Package\boost_1_40_0
附件依赖项:
E:\******\Package\boost_1_40_0\bin.v2\libs\test\build\msvc-9.0\debug\address-model-32\asynch-exceptions-on\threading-multi\boost_prg_exec_monitor-vc90-mt-gd-1_40.lib
E:\******\Package\boost_1_40_0\bin.v2\libs\test\build\msvc-9.0\debug\address-model-32\asynch-exceptions-on\threading-multi\boost_unit_test_framework-vc90-mt-gd-1_40.lib
(星号为某文件夹, 这里用星号代替,
另外已经将
E:\******\Package\boost_1_40_0\bin.v2\libs\test\build\msvc-9.0\debug\address-model-32\asynch-exceptions-on\threading-multi\
下的对应的两个dll文件拷贝到下面的工程目录下了)

按boost test中文文档eg9,如下:

#include "stdafx.h"
#define BOOST_TEST_DYN_LINK
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
using namespace boost::unit_test;

//____________________________________________________________________________//

void free_test_function( int i, int j )
{
BOOST_CHECK_MESSAGE(false, i);
BOOST_CHECK_MESSAGE(false, j);
BOOST_CHECK( true /* test assertion */ );
}

//____________________________________________________________________________//

bool init_function()
{
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 1, 1 ) ) );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 1, 2 ) ) );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 2, 1 ) ) );

return 0;
}

//____________________________________________________________________________//

int _tmain( int argc, char* argv[] )
{
return ::boost::unit_test::unit_test_main( &init_function, argc, argv );
}

编译结果:
错误 36 error C2491: “boost::itest::exception_safety”: 不允许 dllimport 函数 的定义 e:\qin_vs2008\package\boost_1_40_0\boost\test\impl\exception_safety.ipp 513
错误 42 error C2491: “boost::itest::logged_expectations”: 不允许 dllimport 函数 的定义 e:\qin_vs2008\package\boost_1_40_0\boost\test\impl\logged_expectations.ipp 228
错误 111 error C2491: “boost::unit_test::unit_test_main”: 不允许 dllimport 函数 的定义 e:\qin_vs2008\package\boost_1_40_0\boost\test\impl\unit_test_main.ipp 175
警告 16 warning C4273: “boost::debug::attach_debugger”: dll 链接不一致 e:\qin_vs2008\package\boost_1_40_0\boost\test\impl\debug.ipp 760
警告 18 warning C4273: “boost::debug::break_memory_alloc”: dll 链接不一致 e:\qin_vs2008\package\boost_1_40_0\boost\test\impl\debug.ipp 953
......
......

麻烦各位达人帮忙看看...
...全文
450 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hezhch123 2011-05-06
  • 打赏
  • 举报
回复
我看不是忘了吧,进军到vs了啊!
Learning_VS 2010-03-17
  • 打赏
  • 举报
回复
大家好
我是Learning_C小号
Learning_C的密码我忘了

谢谢大家的回答
我会另外开帖给大家分的 谢谢
bloodlee_hust 2010-03-14
  • 打赏
  • 举报
回复
一句题外话,听一同事研说boost::test不好用,比不上google test易学,方便。
我们公司现在全用google test.
logiciel 2010-03-13
  • 打赏
  • 举报
回复
在LZ所说的例子9前面增加了3个宏定义,终于可以编译、连接、运行了。本人用的是VS2005和boost_1_42。

#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN
#define BOOST_TEST_INCLUDED
#define BOOST_TEST_DYN_LINK
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
using namespace boost::unit_test;

//____________________________________________________________________________//

void free_test_function( int i, int j )
{
BOOST_CHECK( true /* test assertion */ );
}

//____________________________________________________________________________//

bool
init_function()
{
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 1, 1 ) ) );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 1, 2 ) ) );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 2, 1 ) ) );

return true;
}

//____________________________________________________________________________//

int
main( int argc, char* argv[] )
{
return ::boost::unit_test::unit_test_main( &init_function, argc, argv );
}


理想主义帕鲁 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 raocong2010 的回复:]

boost库头文件会自动指定需要加载的库~不需要自己显式的说明~
一般将vs2008环境变量配置好就可以了~
即将boost库解压出来的bin与lib目录添加至vs工作目录下~

配置方法 vs菜单栏-Tools-Options-Projects and Solutions-VC++ Directories
然后在右边的面板选择下拉菜单~并根据提示添加就可以了~
[/Quote]

对了~还有Include目录也需要添加~
理想主义帕鲁 2010-03-13
  • 打赏
  • 举报
回复
boost库头文件会自动指定需要加载的库~不需要自己显式的说明~
一般将vs2008环境变量配置好就可以了~
即将boost库解压出来的bin与lib目录添加至vs工作目录下~

配置方法 vs菜单栏-Tools-Options-Projects and Solutions-VC++ Directories
然后在右边的面板选择下拉菜单~并根据提示添加就可以了~
Learning_C 2010-03-12
  • 打赏
  • 举报
回复
看错误报告
我知道dllimport不能定义
可是我还应该怎么配置vs2008来运行boost test的动态库使用例子呢??
logiciel 2010-03-12
  • 打赏
  • 举报
回复
#include <boost/test/included/unit_test.hpp>
改为
#include <boost/test/unit_test.hpp>
可消除编译错误.

不知何故,几个版本的帮助文件中都是前一种写法,但实际不可行.
Learning_C 2010-03-11
  • 打赏
  • 举报
回复
我看的文档是1.37版本的

另外,当我只添加了上面的那个附加包含目录
而没有拷贝附件依赖项,也没有拷贝dll的时候

就已经报上面的错误和警告了

大家帮忙看看了

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧