exe_common.inl 中的非法指令

AlE*_*ich 5 .net c++ windows visual-studio

这大约是我试图解决我的问题的一周,我真的需要帮助。我希望有人能发现我的设置有什么问题。

(我是法国人,所以对于任何英语错误我深表歉意)

语境

我有一个由 OpenFace 开发的 Visual Studio 项目,OpenFace 是一个免费的开源库,可在该地址下载: https: //github.com/TadasBaltrusaitis/OpenFace。“开发自”是因为该项目仅使用 OpenFace 的代码。我确切地说该项目不是我做的,我是从私人存储库中签出的。

问题

我的项目构建了一个可执行文件,但未运行,在进入我的程序的入口点之前,被第 223 行文件 exe_common.inl (不知道这个文件是什么)处的非法指令停止了(cout << " " << main() 函数开头的 endl 未执行)。

这是有罪线:

__scrt_current_native_startup_state = __scrt_native_startup_state::initialized;
Run Code Online (Sandbox Code Playgroud)

这里是该断点处的堆栈跟踪:

CamFeaturesExtractor_Affich.exe!dlib::get_global_clock(void)
CamFeaturesExtractor_Affich.exe!00007ff63493114e()
ucrtbase.dll!_initterm()
CamFeaturesExtractor_Affich.exe!__scrt_common_main_seh() line 223
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()
Run Code Online (Sandbox Code Playgroud)

这里是确切的消息异常:

Unhandled exception at 0x00007FF63499C5B7 in CamFeaturesExtractor_Affich.exe: 0xC000001D: Illegal Instruction.
Run Code Online (Sandbox Code Playgroud)

我尝试过的

  • 将 VS 2017 更改为 2015
  • 在 x64/x86 中构建调试/发布
  • 将配置属性 > C/C++ > 代码生成中的增强指令集更改为 AVX、AVX2、SSE、SSE2、IA32、无设置...
  • 禁用任何优化

这个问题不会出现在一些较新的计算机上(请检查下面的我的规格),所以我的第一个猜测是这是一个硬件问题。Intel Cord Duo I5(与我的计算机型号相同)上不会触发异常。这是我的规格:

Edition : Windows 10 Professionel
Version : 1511
OS Version : 10586.679
Processor : Intel(R) Celeron(R) CPU 2950M @ 2.00 GHz 2.00 GHz
RAM : 4G
System type : OS 64 bits, processeur x64
Run Code Online (Sandbox Code Playgroud)

如果问题是由于我的处理器很差而没有指令,是否有解决方法或者我需要更换计算机?如果您需要一些我忘记提供的信息,请告诉我,如果您尝试帮助我,请提前致谢...

编辑

代码按要求停止的反汇编部分:

00007FF6D635B5BD  mov         eax,0FFh  
00007FF6D635B5C2  jmp         __scrt_common_main_seh+167h (07FF6D635B6B3h)  

            _initterm(__xc_a, __xc_z);
00007FF6D635B5C7  lea         rdx,[__xc_z (07FF6D639ED98h)]  
00007FF6D635B5CE  lea         rcx,[__xc_a (07FF6D639EC10h)]  
00007FF6D635B5D5  call        _initterm (07FF6D635C4B0h)  

            __scrt_current_native_startup_state = __scrt_native_startup_state::initialized;
00007FF6D635B5DA  mov         dword ptr [__scrt_current_native_startup_state (07FF6D64162E0h)],2  
        }
        else
00007FF6D635B5E4  jmp         __scrt_common_main_seh+0A2h (07FF6D635B5EEh)  
        {
            has_cctor = true;
00007FF6D635B5E6  mov         sil,1  
00007FF6D635B5E9  mov         byte ptr [has_cctor],sil  
        }

        __scrt_release_startup_lock(is_nested);
00007FF6D635B5EE  mov         cl,bl  
00007FF6D635B5F0  call        __scrt_release_startup_lock (07FF6D635B368h) 
Run Code Online (Sandbox Code Playgroud)

请注意,正如评论中所述,exe_common.inl 是一个只读 Visual Studio 文件,位于 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src\vcruntime\exe_common.inl 中。如果你想看的话,我做了一个要点:https://gist.github.com/AlEmerich/281994ebbcde7d3bac88f21a85de96e2

最后编辑: 我不知道这是否是正确的方法,但我让观众知道我通过尝试更换计算机而放弃了这个问题。我现在有一个更新的硬件,它会抛出任何错误。不管怎样,谢谢你的帮助!

nie*_*tel 1

对我来说,_CRT_SECURE_NO_WARNINGS从发布模式中删除并尝试在发布模式下构建。它应该包含一些错误,修复它们,然后就应该没问题了。