【发布时间】:2012-02-03 09:31:02
【问题描述】:
昨天我收到了这个链接器错误。我在 google 和 msdn 上搜索过,但没有成功。 我的问题: 我已将我的 cpp 项目的某些部分移动到外部静态库中。我将 h 文件添加到我的主项目中,并将依赖项添加到 lib 文件中。不幸的是,我收到了很多链接器错误。
1>Compressor.obj : error LNK2001: unresolved external symbol "public: bool __thiscall NWindows::NFile::NFind::CFileInfo::Find(unsigned short const *)" (?Find@CFileInfo@NFind@NFile@NWindows@@QAE_NPBG@Z)
1>Compressor.obj : error LNK2001: unresolved external symbol "public: class NWindows::NCOM::CPropVariant & __thiscall NWindows::NCOM::CPropVariant::operator=(unsigned short const *)" (??4CPropVariant@NCOM@NWindows@@QAEAAV012@PBG@Z)
1>Compressor.obj : error LNK2001: unresolved external symbol "public: bool __thiscall CInFileStream::Open(unsigned short const *)" (?Open@CInFileStream@@QAE_NPBG@Z)
1>Compressor.obj : error LNK2001: unresolved external symbol "public: bool __thiscall NWindows::NFile::NIO::COutFile::Create(unsigned short const *,bool)" (?Create@COutFile@NIO@NFile@NWindows@@QAE_NPBG_N@Z)
1>Compressor.obj : error LNK2001: unresolved external symbol "void __cdecl ConvertUInt32ToString(unsigned int,unsigned short *)" (?ConvertUInt32ToString@@YAXIPAG@Z)
1>Compressor.obj : error LNK2001: unresolved external symbol "public: bool __thiscall NWindows::NDLL::CLibrary::Load(unsigned short const *)" (?Load@CLibrary@NDLL@NWindows@@QAE_NPBG@Z)
所有这些方法都是我的外部库的一部分。我尝试了很多编译器设置但没有成功。 此外,当我从链接器中完全删除 lib 依赖项时,我得到 26 LNK2001 错误。所以链接器只找到库的“部分”。 我是否为我的项目使用了错误的编译器/链接器选项?
编辑: 问题是方法 CLibrary::Load(LPCTSTR fileName) 的参数定义 LPCTSTR。在我的库中,我将选项“将 wchar_t 视为内置类型 (Properties->C/C++->Lanuage-> ... ) 设置为否。现在它可以工作了。
【问题讨论】:
-
您是否在这些函数的头文件定义中遗漏了一个外部“C”?
-
extern "C"可能不会成为错误消息中的班级成员的问题(operator=等人)