LNK2019:第1行.obj文件中未解析的外部符号__imp__

LNK2019: Unresolved external symbol __imp__ in the .obj file in Line 1

本文关键字:外部 符号 imp 1行 obj 文件 LNK2019      更新时间:2023-10-16

我不知道哪里出了问题。我将描述这个问题,然后阐述我对正在发生的事情的理解。这是一个简单的代码:

#include <iostream>
#include <stdio.h>
#include "stdafx.h"
#include <iViewNG-Core.h>
int main(int argc, char ** args) {
    iViewVersion version;
    iViewRC rc = iView_GetLibraryVersion(&version);
    if (RC_NO_ERROR != rc)
        printf("ERROR returned by iView_GetLibraryVersion(): %dn", rc);
    printf("The version of the libiViewNG is: %u.%u.%u.%un", version.major, version.minor, version.patch, version.build);
    return 0;
}

错误描述:

错误LNK2019未解析的外部符号__imp__iView_GetLibraryVersion@4在function _main SMI_TrialTests中引用c:UsersRakshitdocumentsvisual studio 2015ProjectsSMI_TrialTestsSMI_TrialTestsSMI_TrialTests SMI_TrialTestsSMI_TrialTests。obj

我确认代码确实正在读取iViewNG-Core.h,因为自动填充允许我使用文件中声明的函数。我通过在适当的vc++目录中正确地添加库和包含目录来做到这一点。既然这是一个链接器问题,我在哪里出错?

我是c++的新手,我知道有很多重复的LNK2019问题,但似乎没有一个能解决我的问题。

链接器输出:

/: " c: rakshit 文档 visual studio用户2015 SMI_TrialTests 项目调试 SMI_TrialTests.exe "/清单/NXCOMPAT/PDB:"c:usersrakshitdocumentsvisual studio .2015 SMI_TrialTests SMI_TrialTests调试项目。pdb "/DYNAMICBASE"kernel32。自由"user32。自由"gdi32。自由"winspool。自由"comdlg32.lib"advapi32。自由"shell32。自由"ole32。自由"oleaut32。自由"uuid.lib"odbc32。自由"odbccp32。/DEBUG/MACHINE:X86/INCREMENTAL用户/PGD:"c: rakshit visual studio的文档2015 SMI_TrialTests 项目调试 SMI_TrialTests.pgd"/SUBSYSTEM:CONSOLE/MANIFESTUAC:"level='asInvoker' uiAccess='false'"/ManifestFile:"调试 SMI_TrialTests.exe.intermediate.manifest"/ERRORREPORT:PROMPT/NOLOGO/VERBOSE/LIBPATH:"C:iView NG .SDK lib lib-Windows7-32"/TLBID: 1

检查符号__imp__iView_GetLibraryVersion@4,它可以分为两个块:

  • __imp_:表示__declspec(dllimport)
  • _iView_GetLibraryVersion@4:这是实际的符号,被修改为C(或extern "C") __stdcall符号,其中参数的大小总计为4字节。

考虑到这一点,并根据您的代码,导致问题的函数很可能是:

extern "C" __declspec(dllimport) iViewRC __stdcall iView_GetLibraryVersion(iViewVersion*);

我建议检查包含此函数的DLL的LIB文件是否传递给cllink(在前一种情况下,cl将为您传递给link)。