尝试将LARGE VS6.0 DLL项目构建/移植到VS2013时,我得到以下链接错误,其中DLL模块依赖于其他DLL模块。关于未定义函数的独特之处在于它需要CString参数,但问题可能比这更明显:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall CTokenEx::Split(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,class CStringArray &,int)" (__imp_?Split@CTokenEx@@QAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@0AAVCStringArray@@H@Z) referenced in function "public: bool __thiscall OptionFlag::isTestEnableByFlag(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" (?isTestEnableByFlag@OptionFlag@@QAE_NV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z)
这是导出符号的模块的dumpbin.exe(来自* .exp文件):
00000148 DIR32NB 00000000 20 $N00027
00000094 DIR32NB 00000000 4F ?Split@CTokenEx@@QAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@0AAVCStringArray@@H@Z (public: void __thiscall CTokenEx::Split(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,class CStringArray &,int))
0000014C DIR32NB 00000000 21 $N00028
这是* .lib文件中的转储,我在* .lib文件中看到了__imp_。
3E30 ?Split@CTokenEx@@QAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@0AAVCStringArray@@H@Z
3E30 __imp_?Split@CTokenEx@@QAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@0AAVCStringArray@@H@Z
当然,我需要再次检查我是否正在阅读这个完全 .exp / .lib,这是/ Verbose告诉我的。
在这种特殊情况下,我遇到的所有问题都是DLL&#34; x&#34;引用DLL中的函数&#34; y&#34;它有一个CTokenEx :: Split()函数,它有CString参数。我认为问题是CSTring MFC vs ATL声明(见下面的链接),现在我不太确定,所以我在这里发布后回到原点。 (也就是我错过了一个错字?DOH?)
我已完成以下操作以隔离问题
建造物业:
我正在使用的DLL模块的CTokenEx部分似乎来自here,但我还没有确认。目前,我不确定这是否相关。
我只是在寻找确认,我对dumpbin.exe的分析告诉我符号输出正确是准确的。我认为这可能是链接顺序问题,并且第二次将链接引用到链接器,但这并没有帮助。在过去的生活中,在SunOs中有类似的连接器问题(早在古代)。
如果我想出这个问题,我会回答这个问题。
答案 0 :(得分:0)
!DOH!
在您取消所有其他选项后。 。
虽然使用/ Verbose和/ Verbose:lib会显示* .lib文件的位置,并确认它们已找到,但您必须注意!
就我而言,&#34;中有一些VS6.0 STALE * .lib文件。&#34;相对于解决方案工作区和链接器首先找到了这些,当然他们可能没有正确装饰符号。
如果链接器告诉您它链接在:
的 MYLIB.LIB 强>
而不是
的路径\到\ MYLIB.LIB 强>
它是主要的线索:)。
Sooo ......我认为这是一个复杂的&amp;奇怪的连接问题。是啊!DOH!简单的链接器问题。
问题解决了,就这么简单。