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

时间:2012-08-28 18:14:50

标签: main static-linking libpng boost-test

使用Boost.Test时,通常不需要定义main()函数,因为Boost.Test本身就提供了一个函数。

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

然而,当我运行我的测试项目时,发生了一些非常奇怪的事情。似乎我的一个依赖库所需的第三方.lib(libpng)中的一个包含一个测试文件,其中main()函数定义在pngtest.c内,如果必须的话知道了)。
由于我的项目没有main()函数,链接器选择那个作为我的“测试”应用程序。因此,我的测试不会运行。

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

2 个答案:

答案 0 :(得分:2)

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

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

有关详细信息,请参阅此处的my post to Boost mailing list和我的OpenCV bug report here

答案 1 :(得分:1)

阿迪,我遇到了同样的问题。看起来你已经满身如此。感谢Google和您的努力,我能够弄明白。

以下是解决问题的一些信息:

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

谢谢!