使用Boost.Test时,通常不需要定义main()
函数,因为Boost.Test本身就提供了一个函数。
我最近不得不将我的项目转换为使用第三方库的静态链接(在VS2010上)。当然,我必须链接到多个.lib
,以便构建成功,我的构建运行得很好。
然而,当我运行我的测试项目时,发生了一些非常奇怪的事情。似乎我的一个依赖库所需的第三方.lib
(libpng)中的一个包含一个测试文件,其中main()
函数定义在pngtest.c
内,如果必须的话知道了)。
由于我的项目没有main()
函数,链接器选择那个作为我的“测试”应用程序。因此,我的测试不会运行。
有谁知道我是如何防止这种情况发生的?如何告诉链接器/编译器使用Boost.Test main()
?
答案 0 :(得分:2)
回答我自己的问题,并澄清@汤姆的回答
事实证明,我使用的libpng
构建脚本不是libpng
的原始版本,而是由OpenCV构建系统创建的脚本。文件pngtest.c
被错误地包含在构建中。
该问题的解决方案是从libpng构建脚本中删除pngtest.c
最新的OpenCV版本不再包含此文件。
有关详细信息,请参阅此处的my post to Boost mailing list和我的OpenCV bug report here。
答案 1 :(得分:1)
以下是解决问题的一些信息:
基本上,我刚刚从libpng项目中排除了pngtest.c
文件,并重新编译了OpenCV。看起来它将在下一版本的OpenCV中修复。
谢谢!