PDA

Visualizza la versione completa : [C++] Creare librerai matematica


ragnonerodocet
27-08-2008, 17:24
Devo creare una libreria matematica di nome mymath, con funzioni di ogni tipo.

Ho creato con Devcpp un nuovo progetto/libreria dll.

Ora come faccio a creare una libreria? Quali sono i comandi?

Ho trovato sul sito di riferimento qualcosa del genere:


#if defined( WIN32 || WIN64)
#define MYMATH_EXPORT __declspec(dllexport)
#define MYMATH_IMPORT __declspec(dllimport)
#else
#if defined(__linux__)
#define MYMATH_EXPORT
#define MYMATH_IMPORT
#else
#error - unsupported platform.
#endif
#endif



#undef MYMATH_API
#if defined(MYMATH_STATIC_LIB )
#define MYMATH_API
#else
#if defined(MYMATH_DLL_BUILD )
#define MYMATH_API MYMATH_EXPORT
#else
#define MYMATH_API MYMATH_IMPORT
#endif
#endif





Cosa vuol dire?

pallinopinco
27-08-2008, 17:40
Procediamo con ordine...

1) Che tipo di libreria devi creare: DLL o altro?
2) Le funzioni matematiche dovrai implementarle tu a mano?
3) Non hai specificato il "sito di riferimento", qual è?

ragnonerodocet
27-08-2008, 18:12
1) dovrei creare sia una lib statica che una dinamica
2) si, le funzioni le scriverò io
3) è un sito del mio docente di Laboratorio di Informatica

mondobimbi
27-08-2008, 22:37
Cosa vuol dire?

quando crei una libreria statica o dinamica in unix non devi dare specificazioni alle funzioni che vuoi esportare o importare, queste vengono esportate o importate naturalmente. L'unica cosa che bisogna fare e dire al compilatore e al linker che si desidera creare una libreria, statica o dinamica, o un eseguibile (in questo caso naturalmente occorrerà che ci sia la funzione main).

In windows invece bisogna esplicitare le funzioni che si vogliono importare o esportare e questo si fa con i modificatori __declspec( dllexport ) e __declspec( dllimport ).
Siccome di norma il file include è uno solo si utilizza una direttiva del preprocessore per inserire nel contesto il giusto comando.

Una tua funzione da importare/esportare potrebbe essere definita come

MYMATH_EXPORT int mia_somma_strana (int a, int b){
return (a - b);
}

e MYMATH_EXPORT nel caso di windows risulterà __declspec( dllexport ) e nel caso di unix non comparirà del tutto.
Hai quindi creato codice multipiattaforma.

ciao
sergio

Loading