[so] [Tema2] biblioteci

Adrian Bosilca bosilca.adrian at gmail.com
Sat Apr 2 15:38:55 EEST 2011


A mers, multumesc :)

În data de 2 aprilie 2011, 14:41, Adrian Scoica
<adrian.scoica at gmail.com> a scris:
>
>
> 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.
>
>


More information about the so mailing list