Cómo evitar la auto-generación del símbolo “.cold” que ocasiona un error de redefinición.
Intenté modificar una parte del código de un proyecto “CRIU”, cuyo código se encuentra en criu/pie/restorer.c
, en detalle, añadí algunas variables nuevas en la función __export_restore_task
. Sin embargo, al compilar el proyecto, usando gcc-9, se produciría un error como el siguiente.
In file included from criu/cr-restore.c:47:
criu/pie/restorer-blob.h:3:9: error: ISO C99 requires whitespace after the macro name [-Werror]
3 | #define restorer_sym__export_restore_task.cold 0x47a1
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
criu/pie/restorer-blob.h:6: error: "restorer_sym__export_restore_task" redefined [-Werror]
6 | #define restorer_sym__export_restore_task 0x2270
|
criu/pie/restorer-blob.h:3: note: this is the location of the previous definition
3 | #define restorer_sym__export_restore_task.cold 0x47a1
|
Parece que hay un símbolo nuevo e innecesario #define restorer_sym__export_restore_task.cold 0x47a1
. Después de remover esta línea, pude compilar el proyecto exitosamente.
Sin embargo, al compilar el proyecto con gcc 5.4.0 no se produce este problema, por lo que pensé que podría ser un problema de la versión de gcc. Otra razón podría ser algo relacionado al stack, ya que añadí algunas variables y al compilar la versión original del proyecto no tuve este problema. De todas maneras, ¿es posible compilar el programa sin el símbolo .cold
, incluso usando gcc-9?
Para obtener información más detallada, puedes consultar mi solicitud de extracción en el siguiente enlace: https://github.com/checkpoint-restore/criu/pull/1711
davy.ai
Posible causa de error al compilar el proyecto CRIU con gcc-9
Escenario
Un experto en TI especializado en c, gcc y símbolos intentó modificar una parte del código de un proyecto llamado “CRIU”. El código se encuentra en
https://github.com/checkpoint-restore/criu`. El experto modificó algunos códigos en
criu/pie/restorer.cy agregó algunas variables nuevas en la función
__export_restore_task`.Sin embargo, al compilar el proyecto utilizando
gcc-9
, el experto se encontró con el siguiente error:Análisis
Según el mensaje de error, parece que hay un símbolo nuevo e innecesario
#define restorer_sym__export_restore_task.cold 0x47a1
que causó el error. Después de eliminar esta línea, el experto logró compilar el proyecto con éxito.Sin embargo, el experto notó que al compilar el proyecto con
gcc 5.4.0
no se produjo el mismo problema. Por lo tanto, el problema podría ser causado por la versión degcc
.Otra posible razón podría ser algo relacionado con la pila, ya que el experto agregó algunas variables que no estaban presentes en la versión original del proyecto.
Solución propuesta
Para compilar el programa sin el símbolo
.cold
incluso utilizandogcc-9
, el experto puede necesitar modificar algunas partes del código. Alternativamente, el experto puede seguir utilizandogcc 5.4.0
para evitar este problema.Para obtener información adicional, el experto proporcionó una solicitud de extracción en el repositorio de GitHub del proyecto, que se puede consultar en `https://github.com/checkpoint-restore/criu/pull/1711`.