Por ejemplo: una función para obtener el poid de la /account dado el PIN_FLD_ACCOUNT_NO, eso se usa mucho en casi todas las librerías custom del proyecto y por lo general se la ve la misma función en todos los módulos, entonces, por qué tenerla por todos lados y no solo en uno e invocarla desde el resto de las librerías?
Ésto a veces se hace porque los desarrolladores no se ponen de acuerdo al principio para tener una librería con funciones que se utilizarán en casi todos los módulos o porque a veces no saben como invocar una función que está en otra librería.
La ventaja de tener una sola función e invocarla de todos lados es que si en algún momento detectamos que la podemos mejorar (performance) o que hay algún error en la misma (memory leak, etc) solamente debemos cambiar el código en un solo lugar en vez de estar revisando por todos lados.
Si la función que queremos reutilizar esta en una librería fm_... y queremos utilizarla desde otra librería es fácil, solamente tenemos que estar seguros de que la función que queremos reutilizar este en un .h, si no lo está la declaramos en un .h en la librería origial y luego lo invocamos en el código fuente de nuestra libería (como hacemos con los .h que están en $PIN_HOME/include).
Si la función que queremos reutilizar esta en una librería fm_... y queremos utilizarla en una app .c (por ejemplo una app del tipo MTA) ahi hay q hacer una pequeña modificación al Makefile de nuestra app, hay que agregar: -lnsl mi_libreria_utils.so, donde mi_libreria_utils.so es la librería que contiene la función que quiero reutilizar en mi app, también tenemos que agregar el .h que contiene la declaración de la función que utilizaremos.
Ejemplo:
La librería mi_libreria_utils.so contiene la funcion: poid_t* get_account_poid(char* account_no) (declarada en el archivo fm_mis_utils_pol.h) y en nuestra app queremos utilizar dicha funcion en el archivo que la utilice debemos incluir:
#include "fm_mis_utils_pol.h";
Y en el Makefile de la app hacer -lnsl path/mi_libreria_utils.so
Ésto evitará errores de linkeo en la compilación, errores del tipo:
Undefined first referenced symbol in file get_account_poid mi_app.o ld: fatal: symbol referencing errors. No output written to demo_app *** Error code 2 make: Fatal error: Command failed for target `demo_app'
Martín Falconi
No hay comentarios.:
Publicar un comentario