链接器错误LNK2019来自第三方库

Linker error LNK2019 from 3rd party library

本文关键字:第三方 LNK2019 错误 链接      更新时间:2023-10-16

我正在移植一个旧的vc++6.0应用程序到vs2005,我得到以下链接器错误,我花了几天时间试图找到一个解决方案。

错误LNK2019:无法解析的外部符号_imp_CreateAwnService@52在public: int __thiscall函数中引用CMainFrame: CreateAsaNetworkServices(空白)"

有一个第三方C库,定义了以下API

extern "C"
{
DLLAPI IAwnServ * AWNAPI CreateAwnService(HINSTANCE hInst,
    const char *pszDId, const char *pszDLoc,
    AWN_DIQUAL DiQual, AWN_DOQUAL DoQual, int Prio,
    const char *pszLicStr, const char *pszInfo,
    AWN_REPEAT Repeat=R_LAST, TIME_T Since=0,
    BOOL bLogin=FALSE, BOOL bDeb=FALSE);
DLLAPI IAwnSend * AWNAPI CreateAwnSend(const IAwnSend *pSend = NULL);
DLLAPI IAwnData * AWNAPI CreateAwnData(const char *pData = NULL, int iLen = 0);
DLLAPI IAwnHeader * AWNAPI CreateAwnHeader(const IAwnHeader *pHeader = NULL);
DLLAPI IAwnReference * AWNAPI CreateAwnReference(const IAwnReference *pRef = NULL);
DLLAPI IAwnFile * AWNAPI CreateAwnFile(const char *pFile = NULL);
DLLAPI IAwnOrder * AWNAPI CreateAwnOrder( const IAwnOrder *pOrder);
DLLAPI IAwnVehicle * AWNAPI CreateAwnVehicle( const IAwnVehicle *pVehicle);
DLLAPI int AWNAPI AwnCmp( const IAwnSend *pSend1, const IAwnSend *pSend2);
DLLAPI TIME_T AWNAPI AwnGetNetTime( const char *NetTime);
DLLAPI int AWNAPI AwnSetNetTime( char *NetTime, TIME_T Time);
DLLAPI TIME_T AWNAPI AwnMakeQueryTime( int MonthsBack);
DLLAPI struct tm *AWNAPI AwnSplitTime( TIME_T Time);
DLLAPI TIME_T AWNAPI AwnMakeTime( tm *ptm);
}
#endif
对API的调用如下:
m_pIAwnService = CreateAwnService( AfxGetApp()->m_hInstance, .........)

我已经检查了所有的链接,包括等,我似乎找不到错误。

看起来您丢失了dll的导入库,或者链接器无法找到它,在链接器->输入->附加依赖

库路径可以在链接器->通用->附加库目录

中设置

可能头文件试图使用#pragma自动包含lib文件,因此您应该再次检查链接器是否可以找到该文件。

另一件要检查的事情是使用依赖项漫步器查看DLL,并确保您试图使用的函数确实是@52堆栈清理大小。也许变量类型的大小在不同的编译器版本之间发生了变化(例如typedefs)。

DLLAPI宏在构建应用程序时定义为__declspec(dllimport)吗?

如果您确实错过了您的DLL的导入库,请查看这篇MSDN文章:如何创建没有. obj或源代码的32位导入库。通过这种方式,您可以对没有提供导入库的第三方DLL进行加载时动态链接。