【链接】无法解析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 无法解析的外部符号
- 单例模式下存在静态变量,静态变量需要声明在类外部。
- 静态变量的声明在
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;
这样分开是会编译报错。
网友评论