Jump to content

LNK1120 unresolved externals


Evolution>
 Share

Recommended Posts

1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl cm2::triamesh::registration(char const *,char const *)" (__imp_?registration@triamesh@cm2@@YAXPBD0@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl cm2::quadmesh::registration(char const *,char const *)" (__imp_?registration@quadmesh@cm2@@YAXPBD0@Z) referenced in function _main
1>..\..\..\libs\DebugWin32\tutorial02_Q4.exe : fatal error LNK1120: 2 unresolved externals

Aparentemente o erro acontece fora do main.cpp e algures dentro do main.obj , só que não faço ideia como editar o main.obj nem o que fazer acerca do erro. Imagino que me falte algo relacionado com as livrarias mas sou novo no mundo do C++ libs e dlls por isso sinto-me encurralado.

Outra coisa, na janela de propriedades do projecto tenho apenas um separador. Não aparecem coisas como o Linker, Visual C++, por ai fora. Tem a ver com o facto de isto ter sido feito em VS 2010 e eu estar a usar 2012?

Link to comment
Share on other sites

o problema é que o linker não consegue descobrir onde está o código das funções descritas no erro, por outras palavras, quer dizer que não consegue encontrar o .dll

Muito obrigado Hippo, trocando-me o erro por miúdos já posso tentar encará-lo melhor. Qualquer problema que não consiga encontrar no Google ou resolver sozinho público neste thread, mas em princípio já me devo conseguir desenrascar a partir daqui. Obrigado 🙂

EDIT: Só uma coisa. Como devem imaginar este código não foi escrito por mim, a minha tarefa neste momento é apenas conseguir compilar uma série de ficheiros que me foram enviados. Como é que eu sei qual é a .dll que falta? Tentei um CTRL + F da solução inteira com a keyword "declspec" e tenho isto:

// Define CM2FEMIMPORT, CM2FEMEXPORT, CM2FEMLOCAL and CM2FEMPUBLIC.
#if (defined(WIN32) | defined(WIN64))
#if defined(_USRDLL)
 #define CM2FEMEXPORT __declspec(dllexport)
#else
 #define CM2FEMEXPORT
#endif
#if defined(CM2_LIBIMPORT)
 #define CM2FEMIMPORT
#else
 #define CM2FEMIMPORT __declspec(dllimport)
#endif
#define CM2FEMLOCAL
#define CM2FEMPUBLIC
#elif defined(CM2_GCC_HASCLASSVISIBILITY)
#define CM2FEMIMPORT
#define CM2FEMEXPORT __attribute__ ((visibility("default")))
#define CM2FEMLOCAL __attribute__ ((visibility("hidden")))
#define CM2FEMPUBLIC __attribute__ ((visibility("default")))
#else
#define CM2FEMIMPORT
#define CM2FEMEXPORT
#define CM2FEMLOCAL
#define CM2FEMPUBLIC
#endif
// Define CM2FEM_API for DLL builds
#ifdef CM2FEM_EXPORTS
#define CM2FEM_API CM2FEMEXPORT
#else
#define CM2FEM_API CM2FEMIMPORT
#endif

Todas as .dlls relacionadas com triamesh e quadmesh estão instaladas e num caminho viável para o VS, não vejo o que poderá faltar. O que estou à procura da vossa parte é de uma maneira de descobrir. Um truque qualquer que seja útil.

Edited by Evolution>
Link to comment
Share on other sites

Podes ter uma versão diferente da biblioteca dinâmica(.dll).

Tu andaste à procura disto declspec, isso serve para na WinAPI32 conseguires importar algo de um DLL com __declspec(dllimport) ou para exportares um função quando estás a criar um biblioteca dinâmica com __declspec(dllexport).

Uma solução que eu vejo é pedires a DLL à pessoa que te a enviou.

Caso essas funções sejam as únicas usadas fornecidas pela .dll tens que confirmar que o compilador percebe que é aquela DLL que estás a usar.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.