Pergunta

Estou recebendo um monte de erros de vinculador em estúdios visual para métodos nem estou chamando diretamente. Eu sou um desenvolvedor java por dia, mas eu tenho um projeto que eu preciso fazer em C ++, destina-se a correr em máquinas Windows. Daí, eu estou brincando preso sobre com o Visual Studio.

Bascally, eu tenho um projeto de sistema operacional que eu adicionei um método de acesso para. Eu compilei o projeto como um arquivo .lib (compila e links muito bem).

Em seguida, tenho meu próprio projeto que usa essa lib. Eu incluí a biblioteca sob Projeto-> Propriedades -> Linker -> Entrada, e defina o diretório apropriado na General -> Diretórios adicionais Lib. Eu incluí o cabeçalho no arquivo apropriado, e eu estou simplesmente chamando o construtor de uma das classes ... nem mesmo chamar o método que eu criei ainda.

Os compila o código, mas eu recebo a seguinte montanha de erros de vinculador - principalmente LNK2019 e LNK2001 erros. Eu tentei recompilar em diferentes configurações (lib, exe, etc.), e os erros de vinculador só parecem se multiplicar. Quando eu voltar às configurações anteriores, o número de erros permanecem em seu pico. Alguma idéia de como consertar isso?

Build Log

Desenvolver começou: Projeto: SpamCapture, Configuration: Debug | Win32

linhas de comando:

Criação de arquivo temporário "c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp" com conteúdos [ / VERBOSE: LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe"/ INCREMENTAL / LIBPATH: "C: \ SpamCapture \ Config \ Debug \"/ MANIFESTO /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

"\ Debug \ Interaction.obj"

"\ Debug \ InteractionSet.obj"

"\ Debug \ LogReader.obj"

"\ Debug \ SpamCapture.obj"

"\ Debug \ stdafx.obj"

"\ Debug \ SpamCapture.res"

"\ Debug \ SpamCapture.exe.embed.manifest.res" ] Criação de linha de comando "Link.exe @c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp / NOLOGO / ErrorReport: PROMPT"

janela de saída:

Linking ... LINK: LNK4067 aviso: ponto de entrada ambígua; seleccionado 'mainCRTStartup' bibliotecas em busca Pesquisando C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ User32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Ole32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Oleaut32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ Uuid.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCPRTD.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.LIB: Pesquisando C: \Arquivos de Programas \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ Mfcs80ud.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ WinInet.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Ws2_32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib: Pesquisando C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ User32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Ole32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Oleaut32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ Uuid.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCPRTD.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.LIB: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ Mfcs80ud.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ WinInet.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Ws2_32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib: Pesquisando C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ User32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Ole32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ Oleaut32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib: Pesquisando C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCPRTD.lib: bibliotecas de busca acabados

erros vinculador comece aqui:

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): Erro LNK2001: externo não resolvido símbolo "public: int virtual __thiscall CWnd :: Create (const char *, char const *, sem assinatura longo, struct tagRECT const &, classe CWnd *, sem assinatura int, CCreateContext struct *)" (Crie @ CWnd @@ UAEHPBD0KABUtagRECT @@ PAV1 @ IPAUCCreateContext @@@ Z)

... um monte mais como este

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): Erro LNK2019: externo não resolvido símbolo "pública: struct HICON__ * thiscall CWinApp :: LoadIconA (unsigned int) const" referenciado na função "pública (LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @ Z?): __thiscall CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg (classe CWnd *)" (?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

... um monte mais como este

(? DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@ Z) C: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ SpamCapture.exe: fatal LNK1120 de erro: 34 externos não resolvidos

Resultado:

log compilação foi salvo em "file: // c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ BuildLog.htm" SpamCapture - 44 de erro (s), 1 aviso (s)

Foi útil?

Solução

O KeyCapture_Config.lib biblioteca está usando classes MFC GUI (CWnd, CWinApp, etc), mas o aplicativo que você está ligando-o em um aplicativo de console (veja a opção /SUBSYSTEM:CONSOLE em sua linha de comando vinculador). Isso não vai funcionar. Você deve criar um novo projeto de aplicativo MFC GUI e adicionar a biblioteca para esse projeto.

Editar: Eu verifiquei apenas o link em seu comentário: http: // dynamicnetservices.com/~will/academic/textinput/keycapture/ e parece que KeyCapture_Config é realmente uma aplicação de diálogo MFC que usa o KeyCapture DLL. Pode ser possível usar KeyCapture em um aplicativo de console ligando diretamente contra KeyCapture.lib.

Outras dicas

O erro de link parece estar reclamando sobre a falta de um monte de funções MFC, e você ligar linhas inclui: /NODEFAULTLIB:"nafxcwd.lib" que excluiriam MFC. É o lib você está ligando contra construído com MFC?

Outros itens a serem verificados são de que você está compilando o aplicativo ea lib com o conjunto mesmo personagem (ie., Tanto de vários bytes ou ambos unicode).

Quando você está construindo um lib não há nenhuma etapa link, para uma coleção arbitrária de objetos pode ser jogado em uma lib sem qualquer consideração para o que mais eles podem precisar.

Parece que o seu projecto é a ligação com o tempo de execução de depuração multithread. É este o seu propósito? Se assim for, pode haver inconsistências com a biblioteca KeyCapture_Config que você parece estar usando.

é KeyCapture_Config uma biblioteca 3o partido? Se assim que você construí-lo a partir da fonte ou foi o lib / dll fornecido para você?

Ela pode apenas levar algum inquérito no qual os tempos de execução C / C ++ estão sendo construídas contra. Você pode fazer referência a Microsoft KB artigo que a ajuda pode lançar alguma luz sobre as possíveis discrepâncias de tempo de execução de construção.

Eu acho que Rob Walker tem pregado o problema. Se a documentação para KeyCapture_Config.lib diz que não há ligação com MFC, verifique a fonte de directivas que requerem ligação com MFC. Algo parecido com isto:

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

causaria uma dependência em MFC, eo doc KeyCapture_Config.lib pode estar fora de data.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top