[so] [Tema 3] Extindere funcții wrapper

Călin Cruceru crucerucalincristian at gmail.com
Fri Apr 8 23:26:31 EEST 2016


Salut,

2016-04-08 23:13 GMT+03:00 Adrian Stanciu <adrian.stanciu.pub at gmail.com>:
>> Modul de organizare corect în cazul acesta, cred că este următorul: se
>> include common.h (cel din framework-ul de testare) din alt fișier
>> header - să-i zicem lib_wrappers.h - și se adaugă în lib_wrappers.h
>> declarațiile noilor wrappere iar in lib_wrappers.c definițiile lor.
>> Și peste tot în implementarea lib-ului vom folosi lib_wrappers.h.  În
>> felul acesta ne asigurăm prin design că suntem API compliant cu
>> framework-ul de testare și nu avem mai multe definiții cu același
>> nume.
>
> Nu îmi este clar argumentul tău. Chiar dacă sunt în alt fișier, dar cu
> același nume, există posibilitatea unui conflict de nume.
>

Mă refeream să nu mai incluzi implementările din common_lin/win.c în
bibliotecă.  Ele vor rămâne Undefined și vor fi găsite la linkarea
executabilului.

Între timp mi-am dat seama că nu e prea frumoasă alternativa asta din 2 motive:
* chiar dacă știm că nu se va schimba framework-ul de testare, e urât
ca biblioteca să "depindă" de acesta.
* nu e consistent cu windows, unde oricum ai nevoie de implementarea
acelor funcții pentru compilarea DLL-ului (cred, nu știu dacă poți
lăsa simboluri undefined într-un DLL).

Am concluzionat că cea mai OK abordare este, cum ai spus și tu,
incluzi doar ce ai nevoie din funcțiile din common_{lin,win}.{h,c} ȘI,
pe linux, compilezi cu -Bsymbolic-functions[1], așa cum era precizat
la [1], pentru a fi safe.

>> [1]: http://stackoverflow.com/questions/6538501/linking-two-shared-libraries-with-some-of-the-same-symbols
[2]: http://linux.die.net/man/1/ld (căutare după "-Bsymbolic-functions").

Mersi,
Călin


More information about the so mailing list