编译链接问题记录

【链接】无法解析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;

这样分开是会编译报错。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容