这是大约一周的时间,我试图解决自己的问题,我确实需要帮助。我希望有人会发现我的设置有什么问题。

(我是法国人,因此对任何英语错误深表歉意)

CONTEXT

我有一个Visual Studio Project,它是从OpenFace开发的,OpenFace是一个免费的开源库,可以在该地址下载:https://github.com/TadasBaltrusaitis/OpenFace。之所以“开发自”,是因为该项目仅使用OpenFace的代码。我确认该项目不是我自己完成的,我从一个私有(private)存储库中 checkout 了。

问题

我的项目在进入程序的入口点之前(cout <
这是罪状:

__scrt_current_native_startup_state = __scrt_native_startup_state::initialized;

这里是该断点处的堆栈跟踪:
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()

这里是确切的消息异常:
Unhandled exception at 0x00007FF63499C5B7 in CamFeaturesExtractor_Affich.exe: 0xC000001D: Illegal Instruction.

我尝试了什么
  • 将VS 2017更改为2015
  • 在x64 / x86中构建在Debug / Release中
  • 将配置属性> C / C++>代码生成中的增强指令集更改为AVX,AVX2,SSE,SSE2,IA32,未设置...
  • 禁用任何优化

  • 该问题在较新的计算机上没有出现(请参阅下面的规格说明),因此我的第一个猜测是这是硬件问题。英特尔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
    

    如果问题是由于处理器不佳而导致的,但没有说明,是否有解决方法,或者我需要更换计算机?
    让我知道您是否需要一些我忘记提供的信息,如果您想帮助我,请先感谢...

    编辑

    代码按要求停止的反汇编部分:
    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)
    

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

    最后编辑:
    我不知道这是否是正确的方法,但我想通过更换计算机让听众放弃这个问题。我现在有一个较新的硬件,它会引发任何错误。无论如何,谢谢您的帮助!

    最佳答案

    对我来说,从 Release模式中删除_CRT_SECURE_NO_WARNINGS并尝试在 Release模式中进行构建。
    它应该包含一些错误,修复它们,然后应该可以。

    关于c++ - exe_common.inl中的非法指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43777652/

    10-13 07:52