3

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

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

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

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

4

2 回答 2

2

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

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

有关更多详细信息,请参见此处的 Boost 邮件列表和此处的OpenCV 错误报告

于 2012-10-14T07:40:06.713 回答
1

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

这里有一些信息可以完善答案:

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

谢谢!

于 2012-10-14T04:14:54.493 回答