es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 . Cambié algunos códigos 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

Tags:  , ,

Answer

  1. Avatar for 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 encriu/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:

    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
          | 
    

    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 de gcc.

    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 utilizando gcc-9, el experto puede necesitar modificar algunas partes del código. Alternativamente, el experto puede seguir utilizando gcc 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`.

Comments are closed.