
Estoy aprendiendo a programar en C y estoy haciendo un programa con varios ficheros: main.c y commands.c y commands.h que están en diferentes directorios. Al intentar compilarlo me da el error:
/tmp/ccdrmrTI.o: In function main': main.c:(.text+0x52): undefined reference to
salir’collect2: error: ld returned 1 exit status
La función «salir» está implementada el fichero commands.c y declarada en commands.h. El fichero commands.h está incluido (#include) en el fichero main.c . De lo que dice el mensaje de error entiendo que he referenciado mal la función pero no entiendo por qué.
Aquí les pongo el codigo de los 3 ficheros:
Main.c
#include <stdio.h>#include <stdlib.h>#include "../incl/network.h"#include "../incl/commands.h"void imprimir_menu();int preguntar_opcion(int min, int max, char mensaje[]);int main (int argc, char *argv[]){ { imprimir_menu(); switch (preguntar_opcion(1,11, "Elija una opcion: ")){ case 1: { salir(); break; } case 2: break; case 3: break; case 4: break; default: printf ("Error, intente nuevamente"); } } return 0;}// Mostrar al usuario las opciones para gestionar la "base de datos"void imprimir_menu() { printf ("[2022] SUCEM S.L. Recolector de redes inalambricasnn"); printf (" [ 1] wificollector_quitn"); printf (" [ 2] wificollector_collectn"); printf (" [ 3] wificollector_show_data_one_networkn"); printf (" [ 4] wificollector_select_bestn"); printf (" [ 5] wificollector_select_worstn"); printf (" [ 6] wificollector_delete_netn"); printf (" [ 7] wificollector_sortn"); printf (" [ 8] wificollector_exportn"); printf (" [ 9] wificollector_importn"); printf (" [10] wificollector_displayn"); printf (" [11] wificollector_display_allnn");}// Recibe el numero que representa la opcion elegidaint preguntar_opcion (int min, int max, char mensaje[]){ int opcion; char opcionchar [SIZE]; printf("%s", mensaje); do{ scanf("%s", opcionchar); opcion= atoi(opcionchar); if ( opcion < min || opcion > max ) {printf("Por favor introduzca un numero entre %d-%dn", min, max); } }while (opcion < min || opcion > max); return opcion; }
Commands.c
#include <stdio.h>#include <stdlib.h>#include "../incl/network.h"#include "../incl/commands.h"void salir() { char ch; printf("¿Esta seguro que desea salir del programa?"); scanf("%c", &ch); if (ch == 's' || ch == 'S'){ exit(0); } }
Commands.h
#ifndef _COMMANDS_H#define _COMMANDS_Hvoid salir();#endif
Alguien me puede ayudar?
Saludos,Yal
No te olvido por más que lo intento
Cansa’o de darle besos al viento
Deseando repetir el momento
Y besarte otra vez, no soltarte jamás
Hmmm
Sí, bueno, espérame, yo sé que va a llegar
Porque todo lo que empieza un día tiene que acabar
Y aunque todo lo que sube también tiene que bajar
Yo quisiera tenerte encima y nunca terminar
No sé si seguiré aferrado de ti
Al recuerdo de lo que vivimos
Te soy fiel aunque no estés aquí
Aunque quizá ya ni te acuerdes de mí
Aunque ni te acuerdes de mí
Niña, escribí cien canciones pa ti
No te olvido por más que lo intento
Cansao de darle besos al viento
Deseando repetir el momento
Y besarte otra vez, no soltarte jamás
Y aquí estoy otra vez pensándote
Aunque juré que no
Pero tus audios no se van de mi teléfono
Cantando Te Boté como si no dolió
Pero estoy como Adele después de que se divorció
Ya le conté hasta mami por no saber qué hacer
Pero ni ella supo cómo aconsejarme bien
No quise ir con papi, me dio pena con él
Porque siempre dijo que yo no era pa’ esa mujer y
No te olvido por más que lo intento
Cansao de darle besos al viento
Deseando repetir el momento
Y besarte otra vez, no soltarte jamás
No te olvido por más que lo intento
Cansao de darle besos al viento
Deseando repetir el momento
Y besarte otra vez, no soltarte jamás