我目前正在将一个带有几百个代码文件和依赖项的项目移植到几个第三方库到Mac Os.我终于达到了程序在没有警告或错误的情况下编译的程度,但它似乎没有执行我自己的主函数.
相反,它似乎执行一些似乎属于第三方的其他主要功能.此函数将一些诊断外观数据写入控制台,然后退出:
(gdb) continue Current language: auto; currently c++ // // This is an automatically generated file. // Do not edit. // const unsigned short expTable[] = { 0x3c00,0x3c00,... 0x3c00,}; Debugger stopped. Program exited with status value:0.
我无法使用调试器找出此主函数所在的位置,因为虽然堆栈跟踪似乎有效,但gdb没有显示每个堆栈条目的正确行号和文件名(有关详细信息,请参阅this unsolved question).
搜索需要几分钟才能完成,但没有返回任何结果.
我的项目在其他库中使用SDL,但我获得了SDL_Main()和潜在的问题,并在一个完美的工作SDL项目模板之上构建了我的项目.所以我很确定我自己的主要功能是有效的.
你知道可能出了什么问题吗?我目前没有关于如何查找和删除流氓主要功能的想法.
谢谢,
阿德里安
编辑:正如我刚刚发现的那样,我在使用字符串“这是一个自动生成的”搜索文件时犯了一个错误.我刚刚发现了几十个具有相同字符串的文件,都属于FreeImage,我正在使用的第三方库之一.所以,问题似乎与FreeImage有关,但我仍然不确定如何继续,因为我已经将Freeimage编译为带有封闭的MacOs makefile的库,并且仅包含库.我将尝试重建一个较新版本的FreeImage并查看它是否解决了我的问题.
解决方法
它可能是在调用main()之前失败的静态对象的初始值设定项吗?