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

时间:2011-09-06 10:24:32

标签: c++ linker-errors

我正在将一个旧的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, .........)

我已检查所有链接包括等,我似乎无法找到错误。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

在构建应用程序时,DLLAPI宏是否定义为__declspec(dllimport)

答案 1 :(得分:0)

看起来你错过了dll的导入库,或链接器找不到它,在链接器中 - >输入 - >其他依赖性

可以在Linker中设置库路径 - >一般 - >其他图书馆馆藏

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

要检查的另一件事是使用dependancy walker查看DLL,并确保您尝试使用的函数实际上是@ 52用于堆栈清理大小。也许变量类型的大小在编译器版本之间发生了变化(例如typedef)。

答案 2 :(得分:0)

如果您 错过了DLL的导入库,请查看此MSDN文章:How To Create 32-bit Import Libraries Without .OBJs or Source。 这样,您可以为没有提供导入库的第三方DLL进行加载时动态链接。