我觉得这个问题非常愚蠢,但在评论“它是main()
,duh”之前,请耐心等待并阅读症状。
我正在使用Visual Studio Express 2012中的一个项目。我们迄今为止仅为Win32(x86)平台构建,但我将.exe版本转换为64位。我现在有一个完全链接的.exe,但是在这个过程中发生了一件有趣的事情:入口点不再被调用。
(C ++,console)程序的入口点是在文件范围内声明的C ++函数,具有以下签名:int main(int argc, char * argv[])
。从第1天开始,这个函数在x86可执行文件中很有用。它没有在x64上调用:
main
int * p(nullptr); *p = 5;
中加入有趣的东西,程序就不会崩溃(即使没有这个我确定main()
没有运行)。可能导致此问题的原因是什么?我该怎么调试呢?我不确定在我的调试器中设置断点的位置,因为我的代码都没有运行...
答案 0 :(得分:6)
0xc000007b
是STATUS_INVALID_IMAGE_FORMAT
。也就是说,操作系统甚至不会将二进制加载得足够远以开始执行它。
您的编辑设置可能有问题。但是,通常当我看到此错误时,问题出在64位应用程序中,试图动态链接到32位DLL。
检查您的库,并验证您的路径是否指向任何DLL的64位版本。
答案 1 :(得分:0)
errlook
实用程序说127是“无法找到指定的过程。”在<winerror.h>
中搜索该文本会产生ERROR_PROC_NOT_FOUND
。
这听起来像是一个DLL问题。
现在我不喜欢应用于main
的术语“入口点”,因为应该怎样调用入口点,即您提供给链接器设置入口点的地址? 启动功能可能会更好。这不仅仅是狡辩:微软的技术作家已经如此彻底地混淆了自己,以至于现在可以庆祝20年关于PE入口点的错误且仅仅是自相矛盾的文件。我认为他们永远不会做对。
gdb
非常不可靠,不是检查某些内容是否被调用的好工具。这是不可靠的,至少当它检测到我是用户时。而是在main
。
答案 2 :(得分:-1)
您可以通过/ ENTRY编译器标志找到(并修改)exe的入口点。
http://msdn.microsoft.com/en-us/library/f9t8842e.aspx
在Visual Studio开发环境中设置此链接器选项