• 静态变量动态库编译错误


    .h 头文件

    class MYNETENGINESHARED_API NetEngineManager :
    public ISafeBase,
    public INetModuleInInterface
    {
    friend class IObjectNetEngine;
    public:
    NetEngineManager(void);
    virtual ~NetEngineManager(void);

    private:
    static NetEngineManager* m_pInstance;
    public:
    static NetEngineManager* GetInstance(){return m_pInstance;}

    。。。

    .cpp源文件代码


    NetEngineManager* NetEngineManager::m_pInstance = NULL;
    NetEngineManager::NetEngineManager(void):
    ISafeBase(eModule_NetEngineManager)
    {
    if(m_pInstance == NULL)
    {
    m_pInstance = this;
    }
    }

    编译提示错误

    2> 所有输出均为最新。
    2>Link:
    2> 正在创建库 ....OutputDebugUploadEngine.lib 和对象 ....OutputDebugUploadEngine.exp
    2>stdafx.obj : error LNK2001: 无法解析的外部符号 "private: static class NetEngineManager * NetEngineManager::m_pInstance" (?m_pInstance@NetEngineManager@@0PAV1@A)
    2>XmlDatabase.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall IDatabaseInterface::IDatabaseInterface(void)" (??0IDatabaseInterface@@QAE@XZ),该符号在函数 "public: __thiscall CXmlDatabase::CXmlDatabase(void)" (??0CXmlDatabase@@QAE@XZ) 中被引用
    2>XmlDatabase.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall IDatabaseInterface::~IDatabaseInterface(void)" (??1IDatabaseInterface@@UAE@XZ),该符号在函数 __unwindfunclet$??0CXmlDatabase@@QAE@ABV0@@Z$1 中被引用
    2>....OutputDebugUploadEngine.dll : fatal error LNK1120: 3 个无法解析的外部命令

    解答如下:
    这是由于导出类的修饰错误,对于dll本身来讲,修饰应该是__declspec(dllexport),而对于调用者来讲,应该是__declspec(dllimport)。而为了正确的编译修饰,可以声明如下:
    #ifdef MY_DLL_EXPORT
    #define _DLL_EXPORT_ __declspec(dllexport)
    #else
    #define _DLL_EXPORT_ __declspec(dllimport)
    #endif
    将MY_DLL_EXPORT加到dll 工程的预编译定义中。
    现在你可以使用_DLL_EXPORT_宏来修饰你任何想导出的类或函数了

    预编译添加 MY_DLL_EXPORT。这个这样__declspec(dllexport) 和_declspec(dllimport)都会编译一下。_declspec(dllimport)管 头文件的 lib 连接。这样才能编译到lib里面。

     我估计这就是要没有输出静态lib,执行这条宏编译__declspec(dllimport)

  • 相关阅读:
    python之九九乘法表
    python选择排序有序区域和无序区域
    mysql学习笔记(一)
    cuda toolkit安装
    vs 无法打开输入文件“kernel32.lib”
    vs libtorch 无法定位程序输入点…于动态链接库…exe
    libtorch 部署 windows10
    openvino记录
    AcWing 803.区间合并
    AcWing 802.区间和
  • 原文地址:https://www.cnblogs.com/dwx-bzdcxy/p/14955558.html
Copyright © 2020-2023  润新知