<br><br><div class="gmail_quote">2011/4/2 Adrian Bosilca <span dir="ltr"><<a href="mailto:bosilca.adrian@gmail.com">bosilca.adrian@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Salut,<br>
<br>
Am o problema la legarea bibliotecii partajate pe Windows daca<br>
folosesc un fisier sursa C++.<br>
<br>
La executia comenzii: "link /nologo /out:server.exe server.obj<br>
crypto.lib" primesc urmatorul mesaj:<br>
server.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) u<br>
signed long __cdecl crypt_rc2(void *,unsigned long,void *)" (__imp_?crypt_rc2@@<br>
AKPAXK0@Z) referenced in function _main<br>
server.exe : fatal error LNK1120: 1 unresolved externals<br>
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BI<br>
\link.EXE"' : return code '0x460'<br>
Stop.<br>
<br>
Mentionez ca am inclus in fisierul sursa directiva:<br>
"__declspec(dllimport) DWORD crypt_rc2(void *in, DWORD len, void<br>
*out);".<br>
Problema se manifesta pentru toate functiile din crypto.h.<br>
<br>
Daca folosesc un fisier sursa C in locul celui C++, atunci aceasta<br>
problema nu apare.<br>
Este necesara folosirea unei surse scrise in C pentru server?<br></blockquote></div><br>Primul lucru la care m-as uita este ca in C++, simbolurile se definesc altfel decat in C. Atunci cand compilezi cod de C++, simbolurile nerezolvate pentru aceleasi functii vor avea un nume diferit fata de numele simbolurilor din bibliotecile de C deja compilate, deci nu se vor potrivi intre ele si vei avea eroare la linking.<br>
<br>Poti instrui compilatorul sa genereze simbolurile in stil C folosind o constructie de forma:<br><br>extern "C" {<br>[ ... header cu functii de C care o sa fie inclus in sursa C++... ]<br>}<br><br>Asa o sa ai corespondenta de nume intre simbolurile dintre cele doua obiecte.<br>
<br>Posibil sa nu fie asta de vina, dar give it a try.<br><br>