繁体   English   中英

链接器错误C ++ Visual Studio 2005

[英]Linker Errors C++ Visual Studio 2005

对于我什至没有直接调用的方法,我在Visual Studio中遇到了很多链接器错误。 我现在是Java开发人员,但是我有一个需要在C ++中执行的项目,旨在在Windows计算机上运行。 因此,我被Visual Studio困扰。

Bascally,我有一个os项目,向其中添加了一个accessor方法。 我将该项目编译为.lib文件(可以正常编译和链接)。

然后,我有一个使用该lib的项目。 我已将该库包含在“项目”->“属性”->“链接器”->“输入”下,并在“常规”->“其他库目录”中设置了适当的目录。 我已经将头文件包含在适当的文件中,而我只是在调用类之一的构造函数...甚至没有调用我创建的方法。

代码可以编译,但是我得到了以下大量的链接器错误-大多数是LNK2019和LNK2001错误。 我尝试在不同的设置(lib,exe等)下进行重新编译,并且链接器错误似乎只会成倍增加。 当我切换回先前的设置时,错误数量仍保持在最高水平。 任何想法如何解决这一问题?

构建日志

开始构建:项目:SpamCapture,配置:Debug | Win32

命令行:

创建内容为[/ VERBOSE:LIB /OUT:"C:\\SpamCapture\\SpamCapture\\SpamCapture\\Debug\\SpamCapture.exe“ / INCREMENTAL / LIBPATH的临时文件“ c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ RSP0000103081740.rsp” “ C:\\ SpamCapture \\ Config \\ Debug \\” / MANIFEST /MANIFESTFILE:"Debug\\SpamCapture.exe.intermediate.manifest“ /NODEFAULTLIB:"libcmtd.lib” /NODEFAULTLIB:"nafxcwd.lib“ / DEBUG / PDB:” c :\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ SpamCapture.pdb“ / SUBSYSTEM:CONSOLE / MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib uuid.lib odbc32.lib odbccp32.lib

“\\调试\\ Interaction.obj”

“\\调试\\ InteractionSet.obj”

“\\调试\\ LogReader.obj”

“\\调试\\ SpamCapture.obj”

“\\调试\\ StdAfx.obj的”

“\\调试\\ SpamCapture.res”

“。\\ Debug \\ SpamCapture.exe.embed.manifest.res”]创建命令行“ link.exe @c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ RSP0000103081740.rsp / NOLOGO / ERRORREPORT:PROMPT”

输出窗口:

链接...链接:警告LNK4067:入口不明确; 选定的'mainCRTStartup'搜索库搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\李 b \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ MSVCRTD.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ OLDNAMES.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfc80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfcs80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ msimg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comctl32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shlwapi.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ atlsd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ wininet.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ws2_32.lib:搜索C:\\ Pr 图Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ mswsock.lib:搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32。 lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\程序文件\\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C :\\ Program Files \\ Microsoft Visual St udio 8 \\ VC \\ PlatformSDK \\ lib \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ MSVCRTD.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ OLDNAMES.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfc80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfcs80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ msimg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comctl32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shlwapi.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ atlsd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ wininet.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ws2 _32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ mswsock.lib:搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C:\\ Program F iles \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索库完成

链接器错误从此处开始:

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj):错误LNK2001:无法解析的外部符号“ public:虚拟int __thiscall CWnd :: Create(char const *,char const *,unsigned long,struct tagRECT const&,class CWnd *,unsigned int,struct CCreateContext *)“(?Create @ CWnd @@ UAEHPBD0KABUtagRECT @@ PAV1 @ IPAUCCreateContext @@@@ Z)

...更多这样

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj):错误LNK2019:无法解析的外部符号“ public:struct HICON__ * thiscall CWinApp :: LoadIconA (unsigned int)const”(?LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @ Z)公开:__thiscall CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg(class CWnd *)“(?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

...更多这样

(?DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@@ Z)C:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ SpamCapture.exe:致命错误LNK1120:34无法解析的外部

结果:

构建日志保存在“ file:// c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ BuildLog.htm” SpamCapture-44错误,1警告

KeyCapture_Config.lib使用的是MFC GUI类( CWndCWinApp等),但是您将其链接到的应用程序是一个控制台应用程序(请参阅链接器命令行中的/SUBSYSTEM:CONSOLE选项)。 这行不通。 您应该创建一个新的MFC GUI应用程序项目,并将库添加到该项目。

编辑:我刚刚检查了您评论中的链接: http ://dynamicnetservices.com/~will/academic/textinput/keycapture/,看来KeyCapture_Config实际上是使用KeyCapture DLL的MFC对话框应用程序。 通过直接与KeyCapture.lib链接,可以在控制台应用程序中使用KeyCapture.lib

链接错误似乎是在抱怨缺少许多MFC函数,并且您链接的行包括:/NODEFAULTLIB:"nafxcwd.lib“,它将排除MFC。 您要链接的lib是使用MFC构建的吗?

要检查的其他事情是,您正在使用相同的字符集(即,都是多字节还是都是unicode)编译应用程序和lib。

当您构建库时,没有链接步骤,因此可以将任意对象集合放入库中,而无需考虑它们可能还需要什么。

看起来您的项目正在与“调试多线程”运行时链接。 这是你的意图吗? 如果是这样,则可能与您似乎正在使用的KeyCapture_Config库不一致。

KeyCapture_Config是第三方库吗? 如果是这样,那么您是从源代码构建它还是为您提供了lib / dll?

可能只需要针对构建哪些C / C ++运行时进行一些调查。 您可以参考Microsoft KB文章 ,该文章可能有助于阐明可能的运行时内部版本差异。

我认为Rob Walker已解决了这个问题。 如果KeyCapture_Config.lib的文档说没有与MFC的链接,请检查源代码中是否需要与MFC的链接。 像这样:

#pragma comment(lib, "nafxcwd.lib")

会导致对MFC的依赖,并且KeyCapture_Config.lib文档可能已过时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM