exec format error: ./config



  • hi, habe folgendes problem:
    ich habe folgende .c dateien, die aus einer konfigurationsdatei lesen und in eine struktur speichern sollen:

    einmal config.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <netinet/in.h>
    #include <inttypes.h>
    #include "config.h"
    #include "../tokenizer/tokenizer.h"
    #include "../util/util.h"
    
    /* confDefaults belegt die Werte einer struct config mit
     * Defaultwerten.
     */
    
    void confDefaults(struct config *conf){
      conf->ip.s_addr = 0;
      conf->port = 0;
      conf->logfile[FILENAME_MAX] = '\0';
      conf->loglevel = 0;
      conf->share[FILENAME_MAX] = '\0';
      conf->shm_size = 0;
    }
    /* parseConfig liest aus einem geoeffnet Filedeskriptor (von einer
     * Konfigurationsdatei) und speichert diese in die config-Struktur
     * */
    
    int parseConfig (int conffd, struct config *conf){
      struct buffer *buf;
      createBuf(buf, 1024);  //funktionen die ne spezielle pufferstruktur erzeugen 
      struct buffer *token;
      createBuf(token, 1024);
      struct buffer *tok;
      createBuf(tok, 1024);
      struct buffer *value;
      createBuf(value, 1024);
    
      // Solange die Datei noch nicht komplett durchsucht ist...
      while(1){
        // Nimm eine Zeile aus der Datei und speicher in buffer token
        if (getTokenFromStream(conffd, buf, token) ==  -1){
          return -1;
        }
        // handelt es sich um Kommentarzeile, naechster while-Durchlauf
        if (token->buf[0] == '#'){
          continue;
        }
    
        /* erstes Token einer nicht-Kommentarzeile in tok */
        if (getTokenFromBuffer(token, tok) == -1){
          return -1;
        }
    
        /* vergleiche das Token mit ip */
        if (strcmp(tok->buf, "ip") == 0){
          /* falls es passt, nehme naechsten Token aus der Zeile */
          if (getTokenFromBuffer(token, value) == -1){
            return -1;
          }
          /* und speicher ihn an die passende Stelle von struct config */
          conf->ip.s_addr = atoi(value->buf);
          /* buffer tok wieder leeren */
          flushBuf(tok);
        }
    
        // Dies wird jetzt mit den anderen struct config Elementen analog gemacht
        // ( also auf andere token wie "port" und so getestet. usw.
    

    und einmal conf_main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include "config.h"
    
    int main(){
      int fd;
      if ((fd = open("server.conf", O_RDONLY)) < 1){
        perror("Fehler bei open");
        return EXIT_FAILURE;
      }
      struct config *conf;
      confDefaults(conf);
      parseConfig(fd, conf);
      return 0;
    }
    

    wenn ich dies jetzt kompiliere gibts kein problem,
    beim ausführen kommt dann immer exec format error: ./config

    weiß einer vielleicht warum das so ist??

    server.conf ist im selben ordner, die headerdateien passen auch, die buffers geb ich nachher alle wieder frei... k.A. 😕



  • bzw. weiß einer was dieser exec format error generell ist. habe im inet schon gesucht und nur was mit architekturproblemen oder errno behandlungen gelesen... aber das ists ja nicht denke ich.



  • Solange du auf den selben PC kompilierst und ausführst ist es kein Architekturproblem.

    Den exec befehl kenne ich nur von ant:
    http://ant.apache.org/manual/Tasks/exec.html

    Deine Fehlermeldung heißt:
    Ausführbarer-Format-Fehler

    Dabei habe ich die Frage, hast du mal die config umbenannt und es dann versucht, vielleicht liegt es nur am Namen?



  • Exec format errors kenne ich nur von Shellscripten ohne Shebang oä.

    Zeig mal genug Code, damit man das Zeug vernünftig kompilieren kann (Tarball oä.) und zeig, wie Du zu kompilieren versuchst.



  • habe es schon gefunden. danke, das mit dem kompilieren wars. 😉
    jaja, die einfachen sachen sind halt des was man am schwersten findet 🙄


Anmelden zum Antworten