链接器选择“错误”主要与Boost.Test

问题描述:

当使用Boost.Test时,通常不需要定义main()函数,因为Boost.Test本身提供了一个函数。链接器选择“错误”主要与Boost.Test

我最近不得不将我的项目转换为使用静态链接的第三方库(VS2010)。当然,我必须链接到多个.lib s,以便构建成功,并且我的构建运行良好。

但是,当我运行我的测试项目时,发生了一件非常奇怪的事情。看来我的一个依赖库要求的第三方.lib(libpng)之一包含一个测试文件,其中定义了(pngtest.c,如果您必须知道的话)中的main()函数。
由于我的项目没有main()函数,链接器选择了一个作为我的“测试”应用程序。因此,我的测试不运行。

有谁知道我如何防止这种情况发生?我如何告诉链接器/编译器使用Boost.Test main()

回答我自己的问题,并澄清@汤姆的答案。
原来我使用的libpng构建脚本不是libpng的原始发行版本,而是由OpenCV构建系统创建的。文件pngtest.c被错误地包含在构建中。

该问题的解决方案是从libpng构建脚本中删除pngtest.c
最新的OpenCV版本,不再包含此文件。

欲了解更多详情,请参阅my post to Boost mailing list这里和我的OpenCV bug report here

阿迪,我有同样的问题。看起来你已经完成了这一个。感谢谷歌和你的努力,我能够弄明白。

这里的一些信息,从而完善了答案:

基本上,我只是排除了pngtest.c文件libpng项目,并重新编译OpenCV。看起来它将在下一版OpenCV中得到修复。

谢谢!