我在Visual Studio中遇到了一大堆链接器错误,我甚至没有直接调用这些方法。我白天是一名java开发人员,但我有一个我需要用C ++做的项目,打算在Windows机器上运行。因此,我在使用Visual Studio时陷入困境。

基本上,我有一个os项目,我添加了一个访问器方法。我将该项目编译为.lib文件(编译和链接正常)。

然后我有自己的项目使用该lib。我在Project-> Properties - >下包含了库。链接器 - >输入,并在General中设置相应的目录 - >其他Lib目录。我已经在适当的文件中包含了标题,我只是调用其中一个类的构造函数......甚至没有调用我创建的方法。

代码编译,但我得到以下大量的链接器错误 - 主要是LNK2019和LNK2001错误。我尝试在不同的设置(lib,exe等)下重新编译,并且链接器错误似乎只是相乘。当我切换回以前的设置时,错误的数量保持在最高点。任何想法如何解决这个问题?

构建日志

  

Build build:Project:SpamCapture,Configuration:Debug | Win32

命令行:

  

创建临时文件" c:\ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp"内容   [   / VERBOSE:LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug \ SpamCapture.exe" / INCREMENTAL / LIBPATH:" 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"

     

" \调试\ 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 \ 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 Files \ 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:       搜索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.li

有帮助吗?

解决方案

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

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

其他提示

链接错误似乎在抱怨缺少很多MFC功能,而你的链接行包括:/NODEFAULTLIB:" afxcwd.lib"哪个会排除MFC。您要链接的lib是否使用MFC构建?

要检查的其他事项是您正在编译应用程序和具有相同字符集的lib(即多字节或两个unicode)。

在构建lib时,没有链接步骤,因此可以将任意对象集合抛出到lib中,而不考虑它们可能需要的其他内容。

看起来您的项目正在与Debug Multithreaded运行时链接。这是你的意图吗?如果是这样,您似乎使用的KeyCapture_Config库可能存在不一致。

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

可能只需要对一些C / C ++运行时构建进行调查。您可以参考 Microsoft知识库文章,这可能有助于阐明可能的运行时构建差异。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top