当使用 Boost.Test 时,通常不需要定义 main()
函数,因为 Boost.Test 自己提供了一个。
我最近不得不将我的项目转换为使用第 3 方库的静态链接(在 VS2010 上)。自然地,我必须链接到多个 .lib
以便构建成功,并且我的构建运行得很好。
但是,当我运行我的测试项目时,发生了一些非常奇怪的事情。似乎我的一个依赖库所需的第 3 方 .lib
(libpng)之一包含一个测试文件,其中定义了一个 main()
函数( pngtest.c
,如果你一定要知道)。
由于我的项目没有 main()
函数,因此链接器选择了那个函数作为我的“测试”应用程序。因此,我的测试没有运行。
有谁知道我如何防止这种情况发生?我如何告诉链接器/编译器使用 Boost.Test main()
?
最佳答案
回答我自己的问题,并澄清@Tom 的回答。
事实证明,我使用的 libpng
构建脚本不是 libpng
的原始版本,而是由 OpenCV 构建系统创建的。文件 pngtest.c
被错误地包含在构建中。
问题的解决方案是从 libpng 构建脚本中删除 pngtest.c
。
最新的 OpenCV 版本不再包含此文件。
有关详细信息,请参阅 my post to Boost mailing list这里和我的 OpenCV bug report here .
关于program-entry-point - 链接器使用 Boost.Test 选择 "wrong"main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165121/