删除CRT(DLL)

时间:2017-01-04 19:04:01

标签: c++ visual-c++ dll crt

从我的DLL中删除CRT后,我发现了这些奇怪的错误。

他们是:

  
      
  • LNK2001未解析的外部符号“void __cdecl std :: _ Xbad_alloc(void)”(?_ Xbad_alloc @ std @@ YAXXZ)
  •   
  • LNK2001未解析的外部符号“void __cdecl std :: _ Xlength_error(char const *)”(?_ Xlength_error @ std @@ YAXPBD @ Z)
  •   
  • LNK2001未解析的外部符号“void __cdecl std :: _ Xout_of_range(char const *)”(?_ Xout_of_range @ std @@ YAXPBD @ Z)
  •   
  • 未解析的外部符号__dtest
  •   
  • 未解析的外部符号__fdtest
  •   
  • 未解析的外部符号__invalid_parameter)noinfo_noreturn
  •   
  • 未解析的外部符号__stdio_common_vsnprintf_s
  •   
  • 未解析的外部符号__stdio_common_vsprintf
  •   
  • 未解析的外部符号__std_terminate
  •   

如果我理解正确Xbad_allocXlength_error是因为newdelete运营商?在这种情况下,我创建我的类实例:

class sc_Core
    {
    public:
        static sc_Core *Instance(void);
        func A();
    public:
        void *operator new(size_t si)
        {
            return HeapAlloc(GetProcessHeap(), NULL, si);
        }
        void operator delete(void *pv) throw()
        {
            HeapFree(GetProcessHeap(), NULL, pv);
        }
    private:
        sc_Core(void) { }
        ~sc_Core(void) { }
        sc_Core(const sc_Core&) { }
        sc_Core(sc_Core&&) {}
        sc_Core& operator=(const sc_Core&) {}
        sc_Core& operator=(sc_Core&&) {}
        static sc_Core *p_Instance;
    };

// Global Scope
sc_Core *sc_Core::p_Instance = nullptr;


    sc_Core *sc_Core::Instance(void)
    {
        if (p_Instance == nullptr)
            p_Instance = new sc_Core();

        return p_Instance;
    }

如果有人知道这些是如何发生的,或者我如何解决它们,我们将非常感激!

1 个答案:

答案 0 :(得分:0)

这些错误并不奇怪。

允许编译器假设他们可以生成依赖于运行时库的代码。如果您要在链接步骤中省略运行时库,那么您必须在自己的代码中提供缺失符号的定义。

关闭某些编译器功能可能会减少丢失符号的数量。例如,您可以尝试关闭异常处理支持,以查看是否仍然需要内部异常类。在调试版本中,编译器可能期望在发布版本中获得运行时的更多支持。