【发布时间】:2014-07-09 06:40:53
【问题描述】:
我觉得问这个问题很愚蠢,但请耐心等待,并在评论“它是main(),duh”之前阅读症状。
我正在使用 Visual Studio Express 2012 开发一个项目。迄今为止,我们只为 Win32 (x86) 平台构建,但我正在将 .exe 构建转换为 64 位。我现在有一个完全链接的 .exe,但在此过程中发生了一件有趣的事情:不再调用入口点。
(C++,控制台)程序的入口点是在文件范围内声明的具有以下签名的 C++ 函数:int main(int argc, char * argv[])。从第一天起,这个函数就在 x86 可执行文件中愉快地工作了。它没有在 x64 上被调用:
- 链接器不会抱怨它找不到入口点。
- 加载程序不会抱怨它找不到入口点。
- 当我从命令行运行 exe 时,它会立即启动并退出,退出代码为 127。
- gdb,例如,说“在启动期间程序退出,代码为 0xc000007b。”
- 在 stdout 或 stderr 上没有任何输出。
- 如果我在
main中加入有趣的东西,比如int * p(nullptr); *p = 5;,程序不会崩溃(即使没有这个,我也可以肯定main()没有运行)。
什么可能导致此问题?我该如何调试它?由于我的代码都没有运行过,因此我不确定在调试器中的何处设置断点...
【问题讨论】:
-
“我把有趣的东西放在 main 中,比如 int * p(nullptr); *p = 5;,程序不会崩溃” 这并不能证明什么
-
main不是程序中要执行的第一个代码。要执行的第一个代码是编译器生成的用于调用静态构造函数等的代码。在that之前运行的代码属于操作系统;它负责加载您的代码所依赖的库。此错误似乎发生在操作系统代码中。
标签: c++ windows debugging visual-studio-2012 64-bit