我很愚蠢地问这个问题,请您在评论“是main()
,傻瓜”的之前先看一下症状。
我正在使用Visual Studio Express 2012开发一个项目。我们之前只为Win32(x86)平台构建过,但现在我要将.exe构建转换为64位。我现在有一个完全链接的.exe文件,但在此过程中发生了一件有趣的事情:入口点不再被调用。
这个(C++,控制台)程序的入口点是一个在文件范围内声明的C++函数,其签名如下:int main(int argc, char * argv[])
。自从第一天起,这个函数就一直在x86可执行文件中正常工作。但在x64上没有被调用:
- 链接器没有抱怨找不到入口点。
- 加载器没有抱怨找不到入口点。
- 当我从命令行运行exe时,它会立即启动并退出,退出代码为127。
- 例如gdb,它说“在启动期间,程序以代码0xc000007b退出。”
- 标准输出和标准错误输出都没有任何输出。
- 如果我在
main
中放入诸如int * p(nullptr); *p = 5;
之类的有趣的东西,程序不会崩溃(即使没有这个,我也确定main()
没有运行)。
什么可能导致这个问题?如何调试它?由于我的代码从未运行过,所以我不确定在我的调试器中要设置断点的位置...
main
不是程序中第一个执行的代码。第一个要执行的代码是编译器生成的用于调用静态构造函数等的代码。在此之前运行的代码属于操作系统;它负责加载您的代码所依赖的库。这个错误似乎发生在操作系统代码中。 - user541686