program-entry-point - 链接器使用 Boost.Test 选择 "wrong"main

标签 program-entry-point static-linking libpng boost-test

当使用 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/

相关文章:

java - public static int[] main (int[] ) 将返回什么以及在哪里?

linux - 将 Yesod 部署到 Heroku,无法静态构建

c++ - 编译带有 openSSL 错误的静态 Qt

c++ - 加载 RGB PNG 结果为黑色图像

c - <png.h> 在 mac os X mavericks 中找不到

c - 加载共享库 libpng16 时出错

Python 主函数不工作

c - 在 C 的 main 函数中使用静态变量是否有意义?

java - 双端队列 java.lang.NoSuchMethodError : main

c++ - 动态链接其他库时如何静态链接libgomp?