美文网首页
编译链接问题记录

编译链接问题记录

作者: 上官宏竹 | 来源:发表于2022-12-04 10:50 被阅读0次

    【链接】无法解析IID_IDXGIFactory

    增加库的依赖#pragma comment(lib, "windowscodecs.lib")
    解决:Unresolved external symbol _IID_IDXGIFactory

    【链接】FFmpeg中无法解析外部符号

    如果在C++文件的链接阶段出现无法解析(Unresolved external symbol)FFmpeg库中相关接口时,请将头文件的引入加上extern "C"标志。

    extern "C" {
    #include <libavformat/avformat.h>
    }
    

    Windows下只生成dll文件而没有lib文件的原因

    • 一个原因是,当前库中没有一个导出的接口,所以编译只生成dll文件,而没有lib文件。
    • 如果使用的是cmake工具。可能你已经设置了共享库的CMAKE_ARCHIVE_OUTPUT_DIRECTORY变量或ARCHIVE_OUTPUT_DIRECTORY属性。如果设置了这些变量/属性,Visual Studio将输出.lib文件由该变量/属性指定到不同目录中。

    【链接】单例模式报:LNK2001 无法解析的外部符号

    1. 单例模式下存在静态变量,静态变量需要声明在类外部。
    2. 静态变量的声明在cpp文件中,那么getInst接口也要实现在cpp文件中,反之亦然,即同时在.h文件中。
      .H文件中:
    class EXPORT Graphics 
    {
        Graphics();     
    public: 
        ~Graphics();
        Graphics(const Graphics&)=delete;
        Graphics& operator=(const Graphics&)=delete;
        static Graphics& GetInst() {
            if (m_instance == nullptr) {
                std::unique_lock<std::mutex> unique_locker(m_mutex);
                if (m_instance == nullptr) {
                    m_instance.reset(new Graphics());
                }
            }
            return *m_instance;
        }
    
    private:
        static std::mutex m_mutex;
        static std::unique_ptr<Graphics> m_instance;
    
    };
    

    .CPP文件中:

    std::mutex Graphics::m_mutex;
    std::unique_ptr<Graphics> Graphics::m_instance = nullptr;
    

    这样分开是会编译报错。


    相关文章

      网友评论

          本文标题:编译链接问题记录

          本文链接:https://www.haomeiwen.com/subject/qgrerrtx.html