[so] [Tema2] biblioteci

Adrian Scoica adrian.scoica at gmail.com
Sat Apr 2 14:41:26 EEST 2011


2011/4/2 Adrian Bosilca <bosilca.adrian at gmail.com>

> Salut,
>
> Am o problema la legarea bibliotecii partajate pe Windows daca
> folosesc un fisier sursa C++.
>
> La executia comenzii: "link /nologo /out:server.exe server.obj
> crypto.lib" primesc urmatorul mesaj:
> server.obj : error LNK2019: unresolved external symbol
> "__declspec(dllimport) u
> signed long __cdecl crypt_rc2(void *,unsigned long,void *)"
> (__imp_?crypt_rc2@@
> AKPAXK0 at Z) referenced in function _main
> server.exe : fatal error LNK1120: 1 unresolved externals
> NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio
> 9.0\VC\BI
> \link.EXE"' : return code '0x460'
> Stop.
>
> Mentionez ca am inclus in fisierul sursa directiva:
> "__declspec(dllimport) DWORD crypt_rc2(void *in, DWORD len, void
> *out);".
> Problema se manifesta pentru toate functiile din crypto.h.
>
> Daca folosesc un fisier sursa C in locul celui C++, atunci aceasta
> problema nu apare.
> Este necesara folosirea unei surse  scrise in C pentru server?
>

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.

Poti instrui compilatorul sa genereze simbolurile in stil C folosind o
constructie de forma:

extern "C" {
[ ... header cu functii de C care o sa fie inclus in sursa C++... ]
}

Asa o sa ai corespondenta de nume intre simbolurile dintre cele doua
obiecte.

Posibil sa nu fie asta de vina, dar give it a try.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20110402/24ad185e/attachment.htm>


More information about the so mailing list