Estoy construyendo una herramienta de memoria de depuración en forma de una biblioteca compartida que enlace contra un ejecutable en tiempo de ejecución (incluye métodos anulados de la familia malloc). Para manejar las inicializaciones de mis estructuras de datos, simplemente uso una variable de condición. Cada vez que se llama mi malloc, verifico si la variable no está configurada y luego llamo a una función responsable de inicializar mis estructuras. Ahora esto funciona bien para programas que ejecutan un solo hilo de ejecución, pero surgen problemas si un programa incluye más de 1 hilo.Anulación de la función _init en C, ¿qué tan seguro es?
La única forma (puedo pensar) de asegurarme de que la inicialización ocurre antes de que el usuario engendre algún hilo es anular _init como se muestra en in this link.
Ahora bien, este pequeño ejemplo pasa justo pero cuando intento de anular _init en mi propia libary compartida consigo este error al intentar vincularlo:
memory2.o: In function `_init':
memory2.c(.text+0x0): multiple definition of `_init'
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/crti.o(.init+0x0):
first defined here
collect2: ld returned 1 exit status
utilizo exactamente los mismos pasos que en el ejemplo de el enlace, es solo que mi biblioteca compartida también incluye un conjunto de variables globales y versiones anuladas de malloc/free etc.
¿Alguien me puede dar una indicación de lo que está pasando mal? Además, ¿hay algo más que tener en cuenta al anular _init (supongo que no es algo muy normal de hacer).
Gracias