【发布时间】:2017-01-22 18:55:17
【问题描述】:
我不确定出了什么问题。我将描述这个问题,然后是我对正在发生的事情的理解。这是一个简单的代码:
#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(): %d\n", rc);
printf("The version of the libiViewNG is: %u.%u.%u.%u\n", version.major, version.minor, version.patch, version.build);
return 0;
}
错误描述:
错误 LNK2019 未解析的外部符号 __imp__iView_GetLibraryVersion@4 在函数 _main SMI_TrialTests c:\Users\Rakshit\documents\visual studio 2015\Projects\SMI_TrialTests\SMI_TrialTests\SMI_TrialTests.obj 中引用
我确认代码确实在读取 iViewNG-Core.h,因为自动填充让我可以使用文件中声明的函数。我通过在适当的 VC++ 目录中正确添加 lib 和 include 目录来做到这一点。由于这是一个链接器问题,我哪里出错了?
我是 C++ 新手,我知道有大量重复的 LNK2019 问题,但似乎没有一个能解决我的问题。
链接器输出:
/OUT:"c:\users\rakshit\documents\visual studio 2015\Projects\SMI_TrialTests\Debug\SMI_TrialTests.exe" /MANIFEST /NXCOMPAT /PDB:"c:\users\rakshit\documents\visual studio 2015\Projects\SMI_TrialTests\Debug\SMI_TrialTests.pdb" /DYNAMICBASE “kernel32.lib” “user32.lib” “gdi32.lib” “winspool.lib” “comdlg32.lib” “advapi32.lib” “shell32.lib” “ole32.lib” “oleaut32.lib” “uuid.lib” “odbc32.lib” “odbccp32.lib” /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"c:\users\rakshit\documents\visual studio 2015\项目\SMI_TrialTests\调试\SMI_TrialTests.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\SMI_TrialTests.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\iView NG SDK\lib\lib-Windows7-32" /TLBID:1
【问题讨论】:
-
你能发布链接器输出,而不仅仅是错误吗?
-
您可能想为您尝试使用的库添加标签,我不知道
iViewNG-Core.h是什么。进一步的sidenode:在C++代码中,你应该使用#include<cstdio>(或者最好放弃它)和std::cout <<而不是printf。 -
既然这是一个链接器问题,我哪里错了? -- 好吧,你不要开始看头文件,因为头文件与链接器——头文件只在编译过程中使用,你的模块编译成功。您需要向链接器指定您正在调用的函数所在的位置,可能在外部库中,
-
@RakshitKothari -- 不,DLL 仅在程序运行时使用。 “.LIB”文件在哪里?我相信您需要熟悉整个构建和运行过程。 1)编译,2)链接,3)运行。编译只创建目标文件,链接器将这些目标文件链接在一起以获得最终的可执行文件。一旦可执行文件存在,然后运行可执行文件需要它所依赖的 DLL。
-
@RakshitKothari - 好的,现在这是一个单独的问题,希望在 SO 上有一个链接。如何构建和运行没有 .LIB 文件且只有 DLL 的应用程序。简短的回答——
LoadLibrary和GetProcAddress。其他答案——从 DLL 构建一个 LIB 文件并使用它(不会详细说明)。
标签: c++ linker-errors